1、容器命令总结:
容器命令 | 含义 |
---|---|
docker run⭐ | 默认先去本地找镜像,没有就去网上仓库拉取,拉取后建立容器 |
docker ps⭐ | 查看容器的状态 |
docker rm | 删除容器 |
docker exec | 进入容器 示例:docker exec -it 容器名字或容器id shell程序 |
docker cp | 复制文件。 真机和容器之间,复制文件可以从容器复制到当前,也可以从当前复制到容器 |
docker --dns IP地址 | 建立容器时,设置dns服务器 |
--add-host 域名 ip地址 | 在/etc/hosts文件中,加入dns域名解析 |
docker top 容器id | 查看容器中的进程 |
docker stats 容器id | 查看容器中资源使用情况(动态 一次性的) |
docker port 容器 | 查看容器和真机之间的端口映射 |
-e | 传递参数 |
2、docker run 启动容器⭐⭐⭐
docker run 可以启动容器,进入到容器,并随机生成容器ID和名称。
帮助: man docker-run
容器与宿主机共用一个内核。
2.1 命令格式:
docker run [选项] [镜像名]:tag [shell命令] [参数]
示例:
docker run -it httpd:latest sh //sh是精简的系统
2.2 启动容器的流程:
- 先找本地
- 本地没有,去官方仓库下载
- 从官方下载到本地,然后再本地运行。(官方仓库没有,就会报错)
2.3 docker run 选项⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
docker run 命令 | 含义 |
---|---|
docker run -d | 后台运行 |
docker run -it 镜像名称:tag 终端 | i与容器进行交互、t是终端 tty。-it一般不分家 |
docker run --name | 容器设置一个名字,指定容器名称 |
docker run --rm | 一次性的容器,退出就删除,一般测试时使用 |
docker run --rm -f | 强制删除 |
docker run --restart always | 一旦意外退出,会自动启动容器 |
docker run -h | 设置容器的主机名 |
docker run -e | 添加参数 |
2.3.1 启动容器⭐⭐
- 前台启动
docker run nginx //在真机的前台运行nginx
- 后台启动 -d:daemon
docker run -d nginx //-d是将nginx在真机的后台运行
2.3.2 --restart
设置容器退出后的 启动规则
docker run -d --restart always httpd
policy 策略 | 说明 |
---|---|
no | 容器不会自动重启。这也是默认设置 |
on-failure[:max-retries] | 仅当容器以非零状态退出时才重启 |
always | 自动退出就会重启;手动退出不会重启! |
unless-stopped | 无论退出状态如何,始终重启容器,但如果容器之前已被置于停止状态,则在守护进程启动时不要启动它。 |
[root@localhost ~]#docker run -d --restart always httpd
d4e42301e70dd933109ac97c3fab9c287694e76769929e73cc001afc4be42c0a
[root@7-2 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4e42301e70d httpd "httpd-foreground" 6 seconds ago Up 5 seconds 80/tcp focused_feynman //开启状态
[root@7-2 ~]# docker stop d4e42301e70d //手动关闭
[root@7-2 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4e42301e70d httpd "httpd-foreground" 2 minutes ago Exited (0) 3 seconds ago focused_feynman //就会自动关闭,不会重启
2.3.3 -it 交互终端⭐⭐⭐⭐⭐
系统类的容器,比如busybox、centos7等, 启动后没有执行任何操作,不像 httpd nginx需要持续向外提供服务, 所以系统类的默认是一次性的容器启动就退出
格式:
docker run 选项 镜像 伪终端
示例:
docker run -it centos:7 bash //类似于一次性命令,exit就会退出。
命令 子命令 选项 镜像:tag 伪终端(因为前面有选项t)
如果,不想只是一次性运行,那么可以用ctrl+q+p命令, (这个命令有延迟性) 退出后,容器仍然可以继续在前台使用。
2.3.4 --name
指定容器名称
注意:每个容器的名称要是唯一的。
[root@7-2 ~]# docker run -d --name web2 nginx
a9e5d28938465e6a36b0c9261e479e97f63a9bb331fd84e099989a309024c7d5
2.3.5 -h
设置容器的主机名
[root@7-2 ~]# docker run -it -h code nginx:1.18 bash
root@code:/# //修改主机名为code
主机名不设置的话,默认是容器id
3、docker ps 查看容器 ⭐⭐⭐
3.1 docker ps 选项
ps:process status
docker ps 选项 | 含义 |
---|---|
docker ps -a | 查看所有容器 all |
docker ps -a -q | -q 查看所有容器的容器id |
docker ps -a -s | -s 查看所有容器的大小 |
docker ps -l | 查看最近一个容器的运行状态 |
docker ps -f | 只显示退出状态的容器 |
小拓展1:怎么
docker ps -aq | xargs docker rm -f //批量删除 所有容器
查看所有容器 强制删除
docker ps -qf status=exited | xargs docker rm -f //批量删除 退出状态的容器
docker ps -qf status=running | xargs docker rm -f //批量删除 运行状态的容器
3.2 只显示开启状态的容器
[root@7-2 ~]# docker ps
3.3 只显示退出状态的容器
[root@7-2 ~]# docker ps -f status=exited
[root@7-2 ~]# docker ps -f status=running //如果只显示运行状态,运行状态不是up,而是running!!!
3.4 查看容器内的进程 top
docker top container
3.5 查看容器资源使用情况
类似于宿主机上的top命令,是动态的
格式:
docker stats 容器名 //注意:中间没有u
拓展:取消动态显示--no-stream
[root@7-2 ~]# docker stats --no-stream xenodochial_lewin
3.6 inspect 查看容器详细信息
docker inspect
可以查看docker各种对象的详细信息,包括:镜像、容器、网络等
docker inspect 容器名
拓展:选择性查看 -f
格式:
docker inspect -f "{{.字段}}" 容器名 //注意:不要忘了加.点
示例:
[root@7-2 ~]# docker inspect -f "{{Args}}" 0e02e876f4e3
[nginx -g daemon off;] //上面Args字段对应的内容
4、docker rm 删除容器
docker rm 可以删除容器,即使容器正在运行当中,也可以被强制删除掉
4.1 rm 选项
选项 | 含义 |
---|---|
-f | 强制 |
-v | 数据卷 |
示例:
[root@7-2 ~]# docker run --name www1 nginx //前台运行一个容器,名为www1
[root@7-2 ~]# docker rm -f www1 //强制删除www1容器
4.2 容器的开启、停止
docker start|stop|restart|pause|unpause 容器ID
5、exec 进入正在运行的容器⭐⭐
5.1 attach
不推荐使用,因为终端之间会互相影响
格式:
docker attach 容器id
5.2 exec⭐⭐⭐
推荐使用:exec
在运行中的容器启动新进程,可以执行单次命令,以及进入容器测试环境使用此方式,使用exit退出,但容器还在运行。
格式:
docker exec 选项 容器id 可执行的命令
示例:
[root@7-2 ~]# docker exec -it aa bash
[root@aa909fc8bf8b /]# exit //这时的退出,只是退出了容器的交互,并不是关闭了容器。
[root@7-2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa909fc8bf8b centos:7 "bash" About an hour ago Up About an hour epic_perlman //此时,容器仍然正在运行
6、暴露容器的端口⭐⭐
EXPOSE 暴露端口
docker run 端口选项
选项 | 含义 |
---|---|
-P(大) | 随机暴露端口。把容器中的固定端口 映射成真机的随机端口。端口范围是:32767-65535 |
-p(小) | 指定暴露的端口。 80:80 前面的80端口是真机的,后面的80端口是容器的 |
6.1 -P(大) 暴露随机端口
外部网络的主机无法直接访问容器中网络服务
随机端口范围:32768-65535
[root@7-2 ~]# docker run -d -P --name www2 nginx //启动容器www2,并暴露随机端口
0c836159ed3fa525ee1a6955780ee6b0b0179baccd63284c40e04057c76c230a
[root@7-2 ~]# docker port www2 //docker port 可以查看容器的端口映射关系
80/tcp -> 0.0.0.0:32768
80/tcp -> [::]:32768
//以上操作是将容器的80端口,映射到真机的32768端口!!!
[root@7-2 ~]# docker inspect www2
"IPAddress": "172.17.0.5", //容器对应的ip地址
小拓展1:查看容器对应的ip地址
[root@7-2 ~]# docker inspect -f "{{.NetworkSettings.IPAddress}}" www2 //www2是容器名
172.17.0.5
小拓展2:查看容器端口的映射关系
docker port 容器id或容器名
6.2 -p(小) 暴露指定端口
格式:
docker run -p 宿主机端口:容器端口 镜像
示例:
[root@7-2 ~]# docker run -p 9527:80 httpd
[root@7-2 ~]# docker port c947b20039c2
80/tcp -> 0.0.0.0:9527
80/tcp -> [::]:9527
小拓展:在不删除容器的情况下,怎么修改已经创建的容器端口映射关系?
- 先停止docker程序
- 修改json文件
7、查看容器的日志
docker logs
可以查看容器中运行的进程在控制台输出的日志信息
8、容器内部的本地Hosts文件 域名解析
容器会自动将容器的ID 加入自已的/etc/hosts文件中,并解析成容器的IP
[root@7-2 ~]# docker run -it -h wxy centos:7 bash
[root@wxy /]# cat /etc/hosts //查看主机名
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.6 wxy //主机名wxy
[root@wxy /]#
例子: 人为的修改 hosts 文件 --add-host
添加指定信息
docker run -it --rm --name a1 --add-host www.kgc.com:6.6.6.6 --add-host www.accp.com:9.9.9.9 alpine
/ # cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
6.6.6.6 www.kgc.com
9.9.9.9 www.accp.com
172.17.0.6 c9d86a5cc10f
9、指定DNS 域名解析服务器
容器的dns服务器,默认采用宿主机的dns 地址
可以用下面方式指定其它的DNS地址,将dns地址配置在宿主机:
- 在容器启动时加选项
--dns=x.x.x.x
- 在
/etc/docker/daemon.json
文件中指定
示例1:
[root@7-2 ~]# docker run -it --dns 1.1.1.1 --dns 2.2.2.2 centos:7 bash
[root@02c3d6143c3c /]# cat /etc/hosts //查看dns
nameserver 1.1.1.1
nameserver 2.2.2.2
10、docker cp 容器内和宿主机之间复制文件
docker cp
命令:表示容器宿主机之间的拷贝
格式语法:
`语法一:`
将容器中的文件拷贝到本地:
docker cp 容器id:容器中要复制的文件 本地文件夹
`语法二:`
将本地文件拷贝到容器:
docker cp 本地文件 容器id:容器中的文件夹
示例:
[root@7-3 ~]# docker pull centos //下载centos镜像
[root@7-3 ~]# docker run -it centos bash //交互进入容器
`新建容器中文件:`
[root@f9559d24deb1 /]# mkdir /data
[root@f9559d24deb1 /]# cd /data
[root@f9559d24deb1 data]# touch aaa.txt | echo "123123" > aaa.txt
[root@f9559d24deb1 data]# cat aaa.txt
123123
[root@f9559d24deb1 data]# exit
[root@7-3 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f9559d24deb1 centos "bash" About a minute ago Up About a minute thirsty_mclean
#将容器中文件拷到本地/data文件
[root@7-3 ~]# docker cp f9559d24deb1:/data/aaa.txt /data/
Successfully copied 2.05kB to /data/
#将本地文件拷到容器中
[root@7-3 data]# docker cp /data/test111.sh f9559d24deb1:/data/
Successfully copied 3.58kB to f9559d24deb1:/data/
小拓展1:格林威治时间如何修改时区
[root@f9559d24deb1 data]# ls -l /etc/localtime //查看时间
lrwxrwxrwx 1 root root 25 Sep 15 2021 /etc/localtime -> ../usr/share/zoneinfo/UTC //软链接
[root@f9559d24deb1 data]# rm -rf /etc/localtime //删除软链接
[root@f9559d24deb1 data]# ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //重新做软链接,选择上海的时区
[root@f9559d24deb1 data]# ls -l /etc/localtime //查看
lrwxrwxrwx 1 root root 33 Jul 31 20:36 /etc/localtime -> /usr/share/zoneinfo/Asia/Shanghai
[root@f9559d24deb1 data]# date
Wed Jul 31 20:37:30 CST 2024
11、容器传递参数
有些容器运行时,需要传递变量。
11.1 方法一:-e 传递
可以使用 -e <参数> 或 --env-file <参数文件> 实现
[root@7-2 ~]# docker pull mysql:5.7.29 //拉取镜像
[root@7-2 ~]# docker run --name m1 -v /data/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=123456 -d -p 3306:3306 mysql:5.7.29 //定义相关信息
[root@7-2 ~]# yum install mysql -y //安装mysql软件
[root@7-2 ~]# mysql -uroot -p123456 -h 127.0.0.1
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| wordpress | //已创建好数据库
+--------------------+
11.2 准备env 环境变量文件
[root@7-2 data]# vim env.list
MYSQL_ROOT_PASSWORD=123123
MYSQL_DATABASE=wordpress
MYSQL_USER=wpuser
MYSQL_PASSWORD=wppass
[root@7-2 data]# docker run -d -p 3307:3306 --env-file=env.list mysql:5.7.29
[root@7-2 data]# mysql -uroot -p123123 -h 127.0.0.1 -P 3307 //真机登录的话,要指定3307端口,否则就会报错!!!
[root@7-2 ~]# docker port cbb6be668a4b //查看端口映射情况
3306/tcp -> 0.0.0.0:3307
3306/tcp -> [::]:3307