Docker重要概念
镜像(Image)、容器(Container)、仓库(Registry)
https://gitchat.csdn.net/columnTopic/5a13bf0175462408e0da8dc1
Docker CE 的安装
卸载旧版本:sudo apt-get remove docker docker-engine docker.io
安装Docker CE:https://gitchat.csdn.net/columnTopic/5a13bf6475462408e0da8df3
Docker使用入门(一)
镜像
获取镜像:sudo docker pull ubuntu:16.04
查看电脑中有哪些镜像:sudo docker images
删除镜像:sudo docker rmi [nameOfImage]
查看镜像操作记录:sudo docker history [nameOfImage]
查看镜像详细信息:sudo docker inspect [nameOfImage]
给镜像设置一个新的仓库:版本对:sudo docker tag my_image:v1.0 my:v0.1
容器
从镜像运行一个容器:sudo docker run -ti --name first ubuntu:16.04 bash
- -ti 参数的含义是:terminal interactive,这个参数可以让我们进入容器的交互式终端。
- --name 指定容器的名字,后面的 first 就是我们给这个容器起的名字。
- ubuntu:16.04 是致命从哪个镜像运行容器,ubuntu是仓库名,16.04是标签。
- bash 指明我们使用 bash 终端。
从相同的镜像再运行一个新的容器:sudo docker run -ti --name second ubuntu:16.04 bash
退出容器:exit
查看当前的容器:sudo docker ps -a
把容器提交为一个新的镜像:sudo docker commit first my_image:v1.0
其中,my_image:v1.0 就是“仓库名:版本号”。真正开发的时候要避免从容器提交镜像的方法。
具体来说,当你运行“Docker run”的时候:
- 检查本地是否存在指定的镜像,不存在就从公共仓库下载;
- 利用镜像创建并启动一个容器;
- 给容器包含一个主进程(Docker 原则之一:一个容器一个进程,只要这个进程还存在,容器就会继续运行);
- 为容器分配文件系统,IP,从宿主主机配置的网桥接口中桥接一个虚拟接口等(会在之后的教程讲解)。
所谓“守护态运行”其实就是后台运行(background running),有时候,需要让 Docker 在后台运行而不是直接把执行的结果输出到当前的宿主主机下,这个时候需要在运行“docker run”命令的时候加上 “-d”参数(-d means detach)。
sudo docker run -d --name withD ubuntu:16.04 bash -c "echo hello world"
进入容器一般有三种方法:
- ssh 登录
- attach 和 exec
- nesenter
exec方式:sudo docker exec -ti first bash
若提示错误:Error response from daemon: Container e3cdd07155f738b6b2ab234cb33c4d1f85c7f4645a7fa2e3173e5638de9bf001 is not running
则先执行:docker start first
docker run与docker start的区别
attach方式:sudo docker attach
first
区别:attach 实际就是进入容器的主进程,所以无论你同时 attach 多少,其实都是进入了主进程。exec 就不一样了,exec 的过程其实是给容器新开了一个进程。
终止运行的容器:
方式1:sudo kill nameOfContainer
方式2:attach 进入容器之后运行“exit”结束容器主进程
删除容器:sudo docker rm nameOfContainer
查看容器详细信息:
sudo docker inspect [nameOfContainer]
查看容器最近一个进程:sudo docker top [nameOfContainer]
停止一个正在运行的容器:sudo docker stop [nameOfContainer]
重启一个正在运行的容器:sudo docker restart [nameOfContainer]
暂停一个容器进程:sudo docker pause [nameOfContainer]
取消暂停:sudo docker unpause [nameOfContainer]
终止一个容器:sudo docker kill [nameOfContainer]
Docker日志:
sudo docker logs
[nameOfContainer]
Docker使用入门(二)
在容器里直接写入数据是很不好的习惯,那么,如果想在容器里面写入数据,该怎么做呢?Docker 数据管理主要有两种方式:数据卷和数据卷容器。
数据卷
在运行 Docker run 命令的时候使用 -v 参数为容器挂载一个数据卷:sudo docker run -ti --name volume1 -v /myDir ubuntu:16.04 bash
可以发现我们的容器里面有一个 myDir 的目录,这个目录就是我们所说的数据卷。
删除一个数据卷
数据卷是用来持久化数据的,所以数据卷的生命周期独立于容器。所以在容器结束后数据卷并不会被删除,如果你希望删除数据卷,可以在使用 docker rm 命令删除容器的时候加上 -v 参数。
Docker网络
查看容器端口映射:
docker container port d11ff9db039a[container ID]