1、安装Docker
2、容器
2.1 创建容器
1 | # 完整 |
image 即镜像名称,以创建Nginx的容器为例
1 | docker run nginx |
注:如果本地没有Nginx的镜像,会自动从镜像仓库拉取
常用选项
--name <name>为新创建的容器指定名字(NAME);默认为docker随机生成的字符串,以创建名为 mynginx的Nginx容器为例
1
docker run --name mynginx nginx
-p <port:port>为新创建的容器指定IP映射,默认为空,没法访问;以主机的80端口映射到Nginx容器的80端口为例
1
docker run --name mynginx -p 80:80 nginx
-P大写的P表示随机映射端口1
docker run -P nginx
-d隔离模式,容器启动后不会占用终端的输入输出。1
docker run -d nginx
-it交互模式,容器启动后可以使用终端进行交互(见2.7 交互模式)
2.2 查看容器
使用查看容器命令会列出容器的CONTAINER ID 、IMAGE 、COMMAND 、 CREATED 、 STATUS 、PORTS 、NAMES
查看运行中的容器
1 | # 完整 |
列出所有的容器
1 | # 完整 |
只列出容器ID
1 | # 简写 |
2.3 停止容器
停止某个正在运行的容器
1 | # 完整 |
以停止mynginx容器为例
1 | # 使用ID 不用写完整,写前一部分即可 |
停止所有的容器
可以在stop后跟上所有需要停止的容器的ID,如下
1 | # 笨方法 |
这显然不适用于容器过多的情况,可以使用上文提到的docker ps -qa先列出所有容器的ID,作为docker stop <ID, ID>的输入,可以使用$()进行命令的组合,如下
1 | # 简写 停止所有的容器 |
2.4 启动容器
让停止的容器重新运行可以使用start、restart命令
1 | # 启动容器 start |
以运行和重启mynginx为例
1 | # 运行 mynginx |
-i选项即使没有附加也可以保持Stdin打开
1 | docker start -i mynginx |
-a选项使用attached模式启动
1 | docker start -a mynginx |
2.5 删除容器
1 | # 完整 |
以删除mynginx为例
1 | # 完整 |
删除所有容器
同停止所有容器一样,使用组合命令,如下
1 | docker rm $(docker ps -qa) |
强制删除正在运行的容器
删除正在运行的容器会报错,需要使用-f选项强制删除
1 | docker rm 78de3f4gd65 -f |
2.6 attached和detached模式
attached模式即容器在前台运行,日志信息会直接输出到终端;
detached模式即容器在后台运行,日志信息不会输出到终端,终端可继续执行其他命令。
detached模式
创建容器时使用-d或--detach选项,以mynginx为例
1 | docker run -d -p 80:80 --name mynginx nginx |
detached模式下查看日志
只查看一次
1 | docker logs <ID or NAME> |
动态跟踪日志使用-f
1 | docker logs <ID or NAME> -f |
detached模式转换为attached模式
1 | docker attch <ID or NAME> |
2.7 交互模式
如果镜像是一个操作系统(如Ubuntu),使用attached和detached模式是没法交互的,就需要使用交互模式创建了。
使用-it选项开始交互模式,以Ubuntu为例
1 | docker run -it --name ubuntu15.1 ubuntu:15.10 sh |
冒号:用于指定镜像版本;
sh 表示可以使用shell脚本。
容器创建后会自动运行,运行后就进入交互模式,可以使用ls等命令

注:使用exit退出会同时结束容器。
为了不退出,创建容器时应当加上-d选项开启detached模式,使用exec命令运行容器。
1 | docker exec -it <ID or NAME> sh |
-it为交互模式,sh代表交互的方式,即用shell脚本交互
以创建并使用exec启动Ubuntu为例
1 | # 创建容器(加上-d选项) |
注:创建容器时加上-it选项是因为操作系统镜像需要交互模式,如果是Nginx一类的镜像可以不加。
2.8 查看容器详细信息
1 | # 完整 |
3、镜像
3.1 拉取镜像
1 | # 完整 |
先在[DokerHub](Docker Hub Container Image Library | App Containerization)上搜索相应的镜像,点击查看,右侧有拉取的方式,以node为例,右侧拉取方式如下


tag为版本号,latest为最新版,使用冒号(:)指定版本docker pull node:14.0
3.2 查看镜像
1 | docker image ls |
查看镜像的详细信息
1 | docker image inspect <image ID> |
3.3 删除镜像
1 | docker image rm <image ID> |
3.4 导出镜像
1 | docker image save nginx:latest -o nginx.image |
:latest指定导出的版本号,-o即输出的路径
3.5 导入镜像
1 | docker image load -i ./nginx.image |
3.6 通过Dockerfile构建镜像
后面更……
4、Docker网络模式
Docker有四种网络模式,Bridge、host、none、container
使用docker network ls查看网络列表
1 | docker network ls |
4.1 Bridge模式
Docker 守护进程创建了一个docker0网桥,默认情况下新建的容器都会桥接到这个网桥,桥接到docker0的网卡能够互相转发数据包。类似于VMware的NAT模式。
4.2 host模式
容器没有自己的网卡,共享宿主机的IP和端口,创建容器时使用--network host指定
1 | docker run --name nginx --network host nginx |
4.3 container 模式
共享其他容器的网络,使用如下方式创建
1 | docker run --name nginx --network container:<ID or NAME> nginx |
注:主容器退出了,依赖它的容器会没有网
4.4 none模式
容器只有lo接口,只能使用127.0.x.x (localhost)
4.5 创建网络
使用默认的bridge模式无法为容器指定IP,需要使用自定义的网络模式。使用如下命令创建
1 | docker network create -d <bridge | host | container> --subnet 192.168.38.0/24 --gateway 192.168.38.1 mynet |
-d (--drive)指定网络模式,不指定就是bridge
--subnet设置网络的网段
--gateway设置网关
mynet即网络名
使用docker network ls查看网络列表,mynet已经出现在列表中了
4.6 使用自定义的网络为容器分配固定IP
在创建容器时使用--ip <192.xxx.xx.xx>为容器分配固定的IP
1 | docker run --name nginx --ip 192.168.38.100 nginx |
同一个网络下的容器之间可以使用容器名通信。
4.7 将其他容器连接到自定义网络
1 | docker network connect [option] network-name <ContainerID or NAME> |
以将busybox(容器名为 bbox)添加到mynet并分配IP192.168.38.101为例
1 | docker network connect --ip 192.168.38.101 mynet bbox |
将容器连接到一个网络会分配一个该网段的IP给容器,以前的网络连接会保留,即容器连接到了多个网络。
使用disconnect断开连接
1 | docker network disconnect mynet bbox |