容器就是对外提供服务的一个实例;
容器启动的必要条件:容器内至少又一个进程运行在前台
1,创建容器
#格式
docker run [参数] [镜像名称] [运行容器的启动命令]
#参数
-d :以守护进程的方式运行一个容器
[root@\ docker~]# docker run -d nginx
--name:指定容器的名称,将名称解析到docker DNS上
docker run -d --name [容器名称] [镜像的名称] [cmd]
[root@\ docker~]# docker run -d --name nginx_store nginx
[root@\ docker~]# docker ps
14c63482dc1d nginx "/docker-entrypoint.…" 50 seconds ago Up 48 seconds 80/tcp nginx_store
-p:指定端口映射
docker run -d -p 宿主机端口:容器内端口 [ 镜像名称]
[root@\ docker~]# docker run -d -p 3456:80 nginx
600266b0ad1dd9d898fdc0e4a341c1365b977f1639cba5dc316059a7a8e892e8
[root@\ docker~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
600266b0ad1d nginx "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 0.0.0.0:3456->80/tcp practical_dubinsky
-P:随机端口映射
docker run -d -p [ 镜像名称]
[root@\ docker~]# docker run -d -P redis
5c3403219107c2bdcbc2fa42a098a98d2e3119f6d71294f3d266eb46eaca82f3
[root@\ docker~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5c3403219107 redis "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 0.0.0.0:49153->6379/tcp nice_ardinghelli
-i:打开标准输出
-t:创建一个伪终端
docker run -it [镜像名称]
[root@\ docker~]# docker run -it centos:7 bash
Unable to find image 'centos:7' locally
7: Pulling from library/centos
2d473b07cdd5: Pull complete
Digest: sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Status: Downloaded newer image for centos:7
[root@9b6f9b3e7885 /]#
-v:挂载目录到容器中
docker run -v 宿主机目录:容器内目录 [镜像名称]
[root@\ docker~]# docker run -v /root:/root -it centos:7 bash
[root@2cc3f2761580 abc]# cd /root
[root@2cc3f2761580 ~]# mkdir ppp
[root@2cc3f2761580 ~]# touch /root/ppp/a.txt
[root@\ docker~]# ll ppp/
-rw-r--r-- 1 root root 0 2021-03-22 09:49 a.txt
--rm:容器生命周期结束时立即删除
docker run --rm [镜像名称]
-e:在容器中创建一个环境变量
docker run -e NAME=ZXX -的 [镜像名称]
[root@\ docker~]# docker run -e NAME=ZXX -it centos:7 bash
[root@1fc563bab6b7 /]# printenv
HOSTNAME=1fc563bab6b7
TERM=xterm
NAME=ZXX
... ...
--link:连接上一个容器,实现网络互通
docker run --link 被连接的容器的名称:连接别名 [镜像名称]
[root@\ docker~]# docker run -d --name ss_nginx -P nginx
[root@\ docker~]# docker run --link ss_nginx:ss_nginx nginx
-h:设置容器主机名
docker run -h “主机名” [镜像名]
[root@\ docker~]# docker run -h centos -it centos:7 bash
[root@centos /]#
docker run运行流程:
1,检查本地是否指定镜像,没有则去对应的仓库下载镜像
2,启动容器,如果指定了命令使用指定的命令,没有则使用默认的cmd
3,返回容器id
2,查看本机的容器列表
# 格式
docker ps 查看当前系统中正在运行的容器列表
# 参数
-a :查看系统中所有的容器(包括停止的)
-q:仅显示容器的id
3,停止和启动一个容器
# 停止
doker stop [容器的名称或者id]
# 启动(该容器必须是系统已经存在的容器)
doker start [容器的名称或者id]
4,删除容器
# 格式
docker rm [容器名称|ID]
# 参数
-f : 强制删除
docker rm -f [容器名称|ID]
# 清空容器
docker rm $(docker ps -a -q)
# 正在运行的容器需要先停止
[root@\ docker~]# docker stop sleepy_elgamal
sleepy_elgamal
[root@\ docker~]# docker rm sleepy_elgamal
sleepy_elgamal
5,查看容器内容
# 格式
docker inspect [容器名称|ID]
# 怎么监控docker运行状态
docker inspect -f '{{.State.Running}}' nginx
[root@\ docker~]# docker inspect -f '{{.State.Running}}' 65a4c1238d69
true
6、复制命令
[root@\ docker~]# docker ps
14c63482dc1d nginx "/docker-entrypoint.…" 45 minutes ago Up 45 minutes 80/tcp nginx_store
1、复制到容器内
docker cp [宿主主机文件路径] 容器ID:容器内路径
[root@\ docker~]# docker cp ./all.tarr 14c63482dc1d:/root/
[root@\ docker~]# docker exec -it 14c63482dc1d bash
root@14c63482dc1d:/# ls /root/
all.tarr
2、复制到容器外
docker cp 容器ID:容器内路径 [宿主主机文件路径]
[root@\ docker~]# docker exec -it 14c63482dc1d bash
root@14c63482dc1d:/# touch /root/bb.txt
root@14c63482dc1d:/# exit
[root@\ docker~]# docker cp 14c63482dc1d:/root/bb.txt /opt/
[root@\ docker~]# ll /opt/
-rw-r--r-- 1 root root 0 2021-03-22 11:05 bb.txt
7、进入容器
1、exec : 在容器外向容器内执行一个命令(官方推荐)
docker exec [参数] [容器的名称|ID] [cmd]
示例1:
[root@\ docker~]# docker exec 14c63482dc1d ls /root
all.tarr
bb.txt
示例2:
终端1:
[root@\ docker~]# docker run -it centos:7 bash
[root@aed66b3efd41 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:09 pts/0 00:00:00 bash
root 15 0 0 03:10 pts/1 00:00:00 bash
root 29 1 0 03:10 pts/0 00:00:00 ps -ef
终端2 开启,关闭:
[root@\ docker~]# docker exec -it aed66b3efd41 bash
[root@aed66b3efd41 /]# exit
再次查看终端1:
[root@aed66b3efd41 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 03:09 pts/0 00:00:00 bash
root 30 1 0 03:10 pts/0 00:00:00 ps -ef
# 官方推荐,相当于在容器里进行一个进程,退出不影响容器进程
2、attach : 在早期docker提供的进入容器的命令(缺点:当其结束时,容器也跟着结束了)
docker attach [容器ID|名称]
# attach进入容器相当于,直接替代了容器的pid为1的总进程,当多个窗口同时使用该命令 进入该容器时,所有的窗口都会同步显示;同步阻塞同步退出(容器里的所有运行的都会结束)
3、nsenter : 建立一个管道连接上容器主ID
nsenter --target $( docker inspect -f {{.State.Pid}} 30d369d70bcd) --mount --uts --ipc --net --pid
4、ssh : 通过ssh连接
网友评论