利用 ssh 連線進入 EC2 主機
本篇以「利用 ssh-agent 連進 Bastion 再連進 mongo,安裝 Docker 和 MongoDB」為範例教學
可參考:http://diary.taskinghouse.com/posts/310691-ssh-connection-amazon-ec2
SSH = Secure Shell protocol
SSH 可以經由將連線的封包加密的技術,來進行資料的傳遞。
===接下來就是指令的部分囉===
目標 1 : 進入 Bastion-EC2
首先透過 eval 幫我們執行 ssh-agent,帶著最終目標機器的KEY,連進跳板機:
eval $(ssh-agent)
ssh-add <General.pem 的路徑>
ssh -A -i <Bastion.pem 的路徑> ec2-user@<Bastion-EC2 的public IP>
* public IP 要進到 EC2 的服務去查
* 初次使用 Key Pair 登入 EC2 可能會遇到這個警告
Permission denied (publickey)
* 通常是因為這個鑰匙檔的權限太過於公開。
* 此時可以chmod 400 <.gem 的路徑>
,將權限改成 400 only the root user can read it
目標 2 : 進入Mongo-EC2
step1 : 進入 Bastion 後,在 terminal 輸入以下指令
ssh ec2-user@<Mongo-EC2 的 IP(10.10.220.XX)>
目標 3 : 安裝 docker
step1 : 更新及安裝 docker ( ec2 會直接安裝 docker-ce )
sudo yum update #進到新機台,記得先更新
sudo yum install -y docker #安裝 docker 囉
sudo reboot #重新開機
* 在這裡因為 EC2 機台的緣故,可以如此輕易地安裝設定,後面會有較為詳細的作法 )
目標 4 : 啟動 MongoDB 的 container
step1 : 下載 mongo 的 docker-image,再透過 image 起一個含有 mongodb 的 container
sudo docker pull mongo #把 mongo 的 image 從 docker hub 上拉下來
sudo docker images #檢查有沒有拉下來以及 image 叫什麼名字
mkdir mongo_data #建立與 container 中資料備份的 mapping 資料夾
docker run -d --name mongo-container -p 27017:27017 –v $(pwd)/mongo_data:/data/db <image name>[:tag]
* <image_name>可以為 image ID 至少前四碼,或是 mongo
* 查 image ID 可利用
docker images
* --name 命名容器 -d 背景執行 -p 讓本地 port 跟 container 的 port 連起來
* 若使用 Amazon Linux AMI,家目錄在 /home/ec2-user
* mapping 時如果 $(pwd) 下沒有 mongo_data,會自動建立一個叫做 mongo_data 的資料夾在 $(pwd) 下,亦即 /home/ec2-user/mongo_data
* mongo-container 內部的家目錄在 /root,mongoDB 的資料存在 /data/db 中
* 我們拉下來的 image,docker file 中有自己啟動 mongod 的 command,所以這步也無須手動操作
* 做 -v 的時候一定要 mapping /data/db 因為 mongoDB docker 的 Volume 設定,若是mapping /data 將不會 mapping 到任何資料
以上,你的 mongodb 就建起來囉( in mongo-container )
補充 : docker-ce on ubuntu
sudo apt-get remove docker docker-engine -y
sudo apt-get remove docker.io -y
sudo apt-get install \
linux-image-extra-$(uname -r) \
linux-image-extra-virtual
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
sudo apt-get update -y
sudo apt-get install docker-ce -y
sudo groupadd docker
sudo usermod -aG docker $USER
sudo systemctl enable docker
sudo docker --version
補充 : docker-ce on CentOS7
sudo yum remove docker \
docker-common \
container-selinux \
docker-selinux \
docker-engine \
docker-engine-selinux
sudo yum install -y yum-utils \
device-mapper-persistent-data lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum-config-manager --enable docker-ce-edge
#edge version
sudo yum makecache fast
sudo yum install -y docker-ce
sudo systemctl start docker
sudo docker --version
ssh-agent 介紹參考 :
https://blog.gtwang.org/linux/using-ssh-agent-forwarding-to-avoid-being-asked-passphrase/
參考官方文件:
https://hub.docker.com/_/mongo/
1.Create a data directory on a suitable volume on your host system, e.g./my/own/datadir.
2.Start yourmongocontainer like this:
$docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo:tagThe-v /my/own/datadir:/data/dbpart of the command mounts the/my/own/datadirdirectory from the underlying host system as/data/dbinside the container, where MongoDB by default will write its data files.