容器,容器是一个镜像的运行实例。可以使用Docker REST API或者CLI来操作容器。容器的实质是进程,但与直接在宿主机执行的进程不同,容器进行运行于属于自己独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户id空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主机运行更加案例。
docker run
常用参数说明
--name #指定容器名称
-it #进入容器
-d #后台运行
--rm #容器结束后自动删除
-p #端口映射
-P #随机端口映射
-e #指定环境变量
-v #数据卷挂载
运行一个容器
[root@docker ~]# docker run --name app -p 8080:80 -d nginx
4775f33b42fd551c367cbeab01f1f6ed1e3a48b33320be3814ec1d5dcabe4608
#创建名称为app的容器,基于nginx镜像,将容器80端口映射到宿主机的8080端口并且放到后台运行。
在启动容器时,如果不配置宿主机器与虚拟机的端口映射,外部程序是无法访问虚拟机的,因为没有端口。
-p
指定映射(小写p)ip:hostPort:containerPort:将容器的指定端口的映射指定地址的指定端口上(不常用)
#
docker run --name app -p 127.0.0.1:80:80 -d nginx
# 映射ip:127.0.0.1的80端口到虚拟机的80端口。
hostPort:containerPort:将容器的指定端口映射到本机的指定端口(常用)
docker run --name app -p 80:80 -d nginx
映射本机的80端口到虚拟机的80端口。
ip::containerPort:将容器的指定端口映射指定地址的随机端口上
docker run -d -it --name app -p 127.0.0.1::80 nginx
hostPort:containerPort/udp:映射本机指定端口到容器的指定(udp协议)端口
[root@docker ~]# docker run -d -it --name nginx-test02 -p 100:80/udp nginx
09b4d0d91217fec1a28ab8495dd4dbe4c974629e8d19ba9349ccedce7dc34a3d
[root@docker ~]# docker port nginx-test02
80/udp -> 0.0.0.0:100 //将本机的100端口映射到容器的UDP协议80端口
-P
随机映射(大写P)将容器暴露的所有端口,都随机映射到宿主机上。
docker run -d -it -P --name app nginx
docker port container_ID/name #容器ID或名称
[root@docker ~]# docker port nginx-test02
80/udp -> 0.0.0.0:100 //将本机的100端口映射到容器的UDP协议80端口
默认查看运行中的容器列表
[root@docker ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4775f33b42fd nginx "nginx -g 'daemon of…" 18 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp app
查看所有容器列表
[root@docker ~]# docker ps -a
查看最近一个容器
[root@docker ~]# docker ps -l
只查看容器ID
[root@docker ~]# docker ps -q
4775f33b42fd
# /bin/bash 执行解释器
[root@docker ~]# docker exec -it app /bin/bash
root@4775f33b42fd:/# hostname
4775f33b42fd
[root@docker ~]# docker stop app
app
#或者
[root@docker ~]# docker stop 4775f33b42fd
[root@docker ~]# docker start 4775f33b42fd
#或者
[root@docker ~]# docker start app
docker restart [container_name | containerID ]
[root@docker ~]# docker restart app
docker pause [容器名称/容器ID]
[root@docker ~]# docker pause app
删除未运行的容器
[root@docker ~]# docker rm app
-f
强制删除容器
[root@docker ~]# docker rm -f app
docker unpause [容器名称/容器ID]
[root@docker ~]# docker unpause app
docker kill [容器名称/容器ID]
[root@docker ~]# docker kill app
docker inspect [容器名称/容器ID]
[root@docker ~]# docker inspect app
docker logs [容器名称/容器ID]
# 访问app容器(nginx)
[root@docker ~]# curl 127.0.0.1:8080
# 查看日志
[root@docker ~]# docker logs app
172.17.0.1 - - [01/Apr/2020:13:21:56 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"
docker cp
docker cp [宿主机文件] [容器:目录]
# step01.准备测试文件
[root@docker ~]# echo 'Hello Docker !!!' >test.txt
[root@docker ~]# cat test.txt
Hello Docker !!!
# step02.复制文件到容器中
[root@docker ~]# docker cp test.txt app:/
# step03.进入容器检验
[root@docker ~]# docker exec -it app /bin/bash
root@4775f33b42fd:/# cat /test.txt
Hello Docker !!!
docker cp [容器:目录] [宿主机文件]
# step01.复制容器文件到宿主机
[root@docker ~]# docker cp app:/test.txt /opt/
# step02.检验结果
[root@docker ~]# cat /opt/test.txt
Hello Docker !!!
docker commit [容器名称/ID] [镜像名称:tag]
常用参数
-a:指定作者
-m:相关说明信息
-p:提交时暂停容器运行
示例
[root@docker ~]# docker commit app app:v1.0
sha256:e9df5b16fc919e93218940e01e50ca7af06809d860a716ad0290d7012d9da0e8
[root@docker ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
app v1.0 e9df5b16fc91 2 seconds ago 127MB