一.认识Docker
知乎的这个问题下面的回答讲的很清楚,尤其是木龙头师傅的回答,将操作系统、虚拟机以及容器串联起来解析,从宏观和微观两个角度认识Docker:https://www.zhihu.com/question/28300645
我觉得认识镜像和容器的关系非常重要,请参考这篇文章:https://blog.csdn.net/qq_40722827/article/details/102827125
二.Docker基本命令及作用
1.Docker容器使用
注:由于解析器的原因,本篇中双短横线显示为一根较长横线
(1)客户端直接输入docker可以查看docker客户端的所有命令选项,而docker command —help可以查看某个命令的具体参数
(2)docker pull … 本地没有所需镜像的时候可以从仓库拉取镜像,如docker pull ubuntu
(3)启动容器 docker run [OPTIONS] IMAGE [COMMAND] [ARG…] 参数解析:
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
—name=”nginx-lb”: 为容器指定一个名称;
—dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
—dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h “mars”: 指定容器的hostname;
-e username=”ritchie”: 设置环境变量;
—env-file=[]: 从指定文件读入环境变量;
—cpuset=”0-2” or —cpuset=”0,1,2”: 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
—net=”bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
—link=[]: 添加链接到另一个容器;
—expose=[]: 开放一个端口或一组端口;
—volume , -v: 绑定一个卷
举例:使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
1 | docker run --name mynginx -d nginx:latest |
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
1 | docker run -P -d nginx:latest |
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
1 | docker run -p 80:80 -v /data:/data -d nginx:latest # :后边跟上版本号 |
以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
1 | docker run -it ubuntu /bin/bash #exit直接退出shell |
(4)启动已停止的容器
先查看有哪些容器:
1 | docker ps -a #去掉-a则只会显示正在运行的容器 |
然后启动某个特定容器:
1 | docker start b750bbbcfd88 |
(5)后台运行容器 (加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec)
1 | docker run -itd --name ubuntu-test ubuntu /bin/bash |
进入容器:
1 | docker attach 1e560fca3906 |
更推荐使用docker exec,当我们退出容器shell的时候容器还会继续在后台运行,不会结束:
1 | docker exec -it 243c32535da7 /bin/bash |
导出和导入容器
导出:
1 | docker export 1e560fca3906 > ubuntu.tar |
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1: 注:| 表示管道,上一条命令的输出,作为下一条命令参数,如 echo ‘yes’ | wc -l
1 | cat docker/ubuntu.tar | docker import - test/ubuntu:v1 |
1 | docker import my_ubuntu_v3.tar runoob/ubuntu:v4 #方法二 更简单 |
(6)删除容器 用docker rm + id 要先停止容器才能删除,否则会报错,加上-f指令则会强制删除正在运行的容器
(7)docker top + id 可以查看某个容器内部运行的进程
(8)使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
2.Docker镜像使用
(1)docker image列出本地镜像
(2)查找搜索镜像可以用docker search …
(3)docker rmi hello-world (删除名为hello-world的镜像)
(4)创建镜像
镜像不满足使用的需求时,有两种处理手段:
a.更新镜像
更新之前,需要用docker run 创建并进入交互shell,在运行的容器内使用apt-get update命令更新,完成以后输入exit退出容器的shell。然后可以通过命令 docker commit 来提交更改的容器副本:也就是将容器存为镜像。
1 | runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2 |
b.构建镜像