Docker 获取镜像,eg:
- docker pull ubuntu:16.04
查看当前电脑有哪些镜像,eg:
- docker images
共有5个属性,分别时所属仓库、标签、镜像id、创建时间和镜像大小
从镜像运行一个容器:
docker run 命令可以从一个镜像运行一个包含一个主进程进程的容器:
eg:
- docker run -ti --name ubuntu_system ubuntu:16.04 bash
命令解释:
- docker run:是从一个镜像运行一个容器的指令;
- -ti:terminal interactive,这个参数可以让我们进入容器的交互式终端;
- –name:指定容器的名称,后面的ubuntu_system就是给这个容器起的名字;
- ubuntu:16.04:指定从哪个镜像运行容器,ubuntu是仓库名,16.04是标签;
- bash:指明使用bash终端
Docker run做了哪些事情:
- 检查本地是否存在指定的镜像,不存在就从公共仓库下载;
- 利用镜像创建并启动一个容器;
- 给容器包含一个主进程(docker原则之一:一个容器一个进程,只要这个进程还存在,容器就会继续运行);
- 为容器分配文件系统、ip,从宿主机配置的网桥接口中桥接一个虚拟接口等;
退出容器:
直接执行 exit 命令即可,此时容器并没有被删除,只是被终止了而已,运行以下命令可以查看当前的容器,eg:
- docker ps -a
删除容器:
- docker rm kind_bose
注:下面很多 docker run的命令,如果有容器名字重复的(如:ubuntu_system),都需要先执行下exit和删除容器操作;
查看当前容器:
- docker ps -a
将容器提交为一个新的镜像:
把刚才的ubuntu_system提交为一个新的镜像,其中myimage:v1.0分别是仓库名和版本号;
- docker commit ubuntu_system myimage:v1.0
注:这种方式创建镜像的习惯不好,使用docker开发的时候应避免这种从容器提交镜像的方法。
后台运行容器:
如果想要容器在宿主机的后台运行,需要在docker run的命令上加上 -d 参数(-d means detach),eg:
- Docker run -d --name ubuntu_system ubuntu:16.04 bash -c "echo hello world"此时不会把输入结果打印到宿主机的终端上,不带 -d 参数时则会将输出结果打印到终端上,eg:
- docker run --name ubuntu ubuntu:16.04 bash -c “echo hello world”
进入容器和终止容器:
进入容器一般有3种方法:
- ssh登录
- attach和exec(docker自带的命令)
- Nesenter
attach和exec进入容器,eg:
- docker exec -ti ubuntu bash
此时在该终端下面创建一个txt文件,在另外一个终端使用以下命令也可以看到刚才创建的txt文件:
docker exec -ti ubuntu 或 docker attach ubuntu(attach需要按两次回车才可进入容器)
attach和exec的区别:
- Docker run 指令会给容器分配一个进程,并且 Docker 的哲学之一就是:一个容器一个进程!所以attach 实际就是进入容器的主进程,所以无论你同时 attach 多少,其实都是进入了主进程。比如,在两个终端分别使用 attach 进入同一个容器,然后我在一个 attach 里面运行的指令也会在另一个 attach 里面同步输出,因为它们两个 attach 进入的根本就是一个进程!
- 在 attach 进入的容器(前提是你退出了 exec),使用“ps -ef”指令可以看出,我们的容器只有一个 bash 进程和 ps 命令本身;而 exec 就不一样了,exec 的过程其实是给容器新开了一个进程,比如我们使用 exec 进入容器后,使用 ps -ef 命令查看进程,你会发现,我们除了 ps 命令本身,还有两个 bash 进程,究其原因,就是因为我们 exec 进入容器的时候实际是在容器里面新开了一个进程。
- 这就涉及到了另一个问题,如果你在 exec 里面执行 exit 命令,你只是关掉了 exec 命令新开的进程,而主进程依旧在运行,所以容器并不会停止;而在 attach 里面运行 exit 命令,你实际是终止了主进程,所以容器也就随之被停止了。总结一下,attach 的使用不会在容器开辟新的进程;exec 主要用在需要给容器开辟新进程的情况下。
终止一个运行的容器:
- docker kill ubuntu
查看docker日志:
- docker logs ubuntu
查看容器详细信息:
- docker inspect ubuntu
查看容器最近一个进程:
- docker top ubuntu
停止一个正在运行的容器:
- docker stop ubuntu
运行一个已经停止的容器:
- docker start ubuntu
继续运行一个被停止的容器:
- docker restart ubuntu
暂停一个容器的进程:
- docker pause ubuntu
取消暂停:
- docker unpause ubuntu
终止一个容器:
- docker kill ubuntu
容器使用的总结和建议:
容器的生命周期:
使用容器的建议:
- 要在容器里面保存重要文件,因为容器应该只是一个进程,数据需要使用数据卷保存;
- 尽量坚持“一个容器,一个进程”的使用理念,当然,在调试阶段,可以使用exec命令为容器开启新进程。
更多关于镜像的操作:
删除镜像:
- docker rmi hello-world
查看镜像操作记录:
- docker history ubuntu:16.04
给镜像设置一个新的 仓库:版本
- docker tag myimage:v1.0 ubuntu1604:v0.1
运行之后会得到一个新的镜像,和原来的镜像一模一样;
查看镜像详细信息:
- docker inspect ubuntu1604:v0.1
仓库:
集中存放镜像的地方;
docker官方维护着一个公共仓库Docker store,可以方便的在Docker store查找自己想要的镜像;Docker store 地址:
https://hub.docker.com/search?type=image
终端登录:
- docker login
输入用户名和密码后,就可以在共有仓库种搜索想要的镜像了: - docker search ubuntu
更多命令查看
- docker --help