Docker的基本使用
1、安装
1.1 使用apt-get安装(非最新版本)
sudo apt-get install docker.io
1.2 使用apt-get安装(最新版本)
sudo apt-get install apt-transport-https
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo bash -c "echo deb https://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"
sudo apt-get update
sudo apt-get install lxc-docker
1.3 安装完成后
查看docker是否运行:
sudo service docker status
查看docker版本:
sudo docker version
2、Hello World
因为每次运行docker命令都需要sudo,可以通过如下操作解决这个问题:
首先将当前用户(这里是python)加到docker组:
$ sudo -s
# adduser python docker
需要重启系统,才能生效。
2.1 搜索并下载一个可用镜像(这里是tutorial)
docker search tutorial
上面的命令将返回tutorial镜像的全名是learn/tutorial,然后下载镜像:
docker pull learn/tutorial
2.2 启动镜像并输出hello world
有了镜像,就可以通过镜像启动容器,并且在容器中做相关操作:
docker run learn/tutorial echo "Hello World!"
2.3 查看容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39a136eaec7b learn/tutorial "echo 'Hello World!' 5 minutes ago Exited (0) 5 minutes ago
2.4 安装ping
在这个容器中是不能直接使用ping命令的,所以需要安装:
docker run learn/tutorial apt-get install -y ping
然后查看最新的container:
$ docker ps -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ff336e137a2 learn/tutorial "apt-get install -y 3 minutes ago Exited (0) 3 minutes ago jovial_tesla
有了CONTAINER ID,就可以保存这个安装了ping的image了(这里保存为learn/ping):
docker commit 3ff336e137a2 learn/ping
3fed5e9fbe3d646fa39423f7edaa9d279adb6b26bf12491be56d17701e1fb4c5
返回的是新的镜像id。
再次查看镜像:
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
learn/ping latest 3fed5e9fbe3d 52 seconds ago 139.5 MB
learn/tutorial latest 8dbd9e392a96 2 years ago 128 MB
已经有两个镜像了。
使用新镜像启动容器并使用ping命令:
docker run learn/ping ping www.baidu.com
PING www.a.shifen.com (111.13.100.91) 56(84) bytes of data.
64 bytes from 111.13.100.91: icmp_req=1 ttl=49 time=50.2 ms
64 bytes from 111.13.100.91: icmp_req=2 ttl=49 time=53.7 ms
...
2.5 检查container
首先找到container的id:
docker ps -a
查看该container:
docker inspect containerid
2.6 发布自己的镜像
docker push learn/ping
镜像只能发布到自己的空间,因此是需要账户名和密码的。
3、发布程序
交互式地进入新安装的虚拟环境:
docker run -i -t learn/ping /bin/bash
如果先运行了容器,之后想进入命令行,可以使用命令:docker attach container_name
在虚拟环境中安装ssh:
apt-get install openssh-server
启动ssh:
/etc/init.d/ssh status
如果显示未启动,则启动:
/etc/init.d/ssh start
这样就可以在物理机上使用ssh或scp命令了,之后就可以像在虚拟机上安装依赖包,发布程序一样了。
4、持久化(生成打包文件)
以上操作不论镜像还是容器,都没有持久化为一个具体文件(虽然镜像与容器本身都是持久的),通过持久化为一个文件,可以实快速部署或迁移。
4.1 持久化镜像
持久化之前,首先需要提交镜像(参考2.4节提交为learn/deploy)。
持久化镜像到文件:
docker save learn/deploy> /home/python/learn_deploy.tar
4.2 持久化容器
找到最新的容器id:
docker ps -l
执行持久化:
docker export 869a61c1403c> /home/python/learn_deploy_con.tar
4.3 删除所有镜像和容器
首先查看活动的容器:
docker ps
杀掉活动的容器:
docker kill containerid
删除所有的容器:
docker rm $(docker ps -q -a)
删除所有镜像:
docker rmi $(docker images -q)
4.4 从容器文件导入
cat /home/python/learn_deploy_con.tar | docker import - learn/deploy_new:bloomfilterv0.1
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
learn/deploy_new bloomfilterv0.1 33c4fc7846db 35 seconds ago 196.2 MB
于是有了新的images。
4.5 从镜像文件导入
docker load < /home/python/learn_deploy.tar
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
learn/deploy_new bloomfilterv0.1 33c4fc7846db 2 minutes ago 196.2 MB
learn/deploy latest 8acaaacef9e1 39 minutes ago 209 MB