容器操作基础命令
命令格式
docker run [选项] 镜像名 [shell命令] [参数]
-p list #指定容器的端口发布到主机
-P #将所有公开的端口发布到随机端口
--name string #为容器分配一个名称
-d #在后台运行容器并打印容器ID
-it #创建并进入容器
--rm #当容器退出时自动删除它
//Example
dcoker run [参数选项] [镜像名称,必须在所有选项的后面] [/bin/echo 'hello world']
docker run centos /bin/echo 'hello world' #启动的容器在执行完shell命令就退出了
从镜像启动一个容器
- 直接进入到容器,并随机生成容器的ID和名称
- docker run -it centos bash
//Example
root@bj-magedu-v-study-14:~# docker run -it centos bash
[root@b730af011361 /]#
------------------------
#进入容器后操作 Ctrl+p+q 退出容器时不注销
显示正在运行的容器
- 显示正在运行的容器
- docker ps
显示所有容器
- 显示所有容器,包括当前正在运行以及已经关闭的所有容器
- docker ps -a
删除运行中的容器
- 删除运行中的容器,即使容器正在运行当中,也会被强制删除
- docker rm -f ed8dd71b626c
命令格式
docker rm [选项] 容器 [容器...]
-f 强制移除正在运行的容器(使用SIGKILL)
-l 删除指定链接
-v 删除与容器关联的卷
随即映射端口
//下载nginx镜像
root@bj-magedu-v-study-14:~# docker pull nginx
//前台启动并随机映射本地端口到容器的80(随机端口默认是从32768开始)
root@bj-magedu-v-study-14:~# docker run -P nginx
指定端口映射
//方式1:本地端口81映射到容器80端口
root@bj-magedu-v-study-14:~# docker run -d -p 81:80 --name nginx-test1 nginx
//方式2:本地IP:本地端口:容器端口
root@bj-magedu-v-study-14:~# docker run -d -p 192.168.26.207:82:80 --name nginx-test2 nginx
//方了,kkkm/l空间,模块 了,你,,,,,,,,,你,看,,,,,, 吗, 式3:本地IP:本地随机端口:容器端口
root@bj-magedu-v-study-14:~# docker run -d -p 192.168.26.207::80 --name nginx-test3 nginx
//方式4:本地IP:本地端口:容器端口/协议,默认为tcp协议
root@bj-magedu-v-study-14:~# docker run -d -p 192.168.26.207:83:80/udp --name nginx-test4 nginx
//方式5:一次性映射多个端口+协议
root@bj-magedu-v-study-14:~# docker run -d -p 86:80/tcp -p 443:443/udp --name nginx-test5 nginx
- 查看运行的容器
命令格式
docker logs [选项] 容器ID/容器名
--details #显示提供给日志的额外细节
-f #跟踪日志输出
--since string #显示从时间戳开始的日志(如:42m表示42 分钟)
--tail string #从日志末尾显示的行数(默认为“all”)
-t #显示时间戳
--until string #在时间戳前显示日志(如:42m表示42 分钟)
//查看nginx容器访问日志
root@bj-magedu-v-study-14:~# docker logs nginx-test1 #一次性查看
root@bj-magedu-v-study-14:~# docker logs -f nginx-test1 #持续查看
查看容器已经映射的端口
- docker port nginx-test5
自定义容器名称
- docker run -it --name nginx-test nginx
[外链图片转存中...(img-boDC59ky-1634096458441)]
后台启动容器
- docker run -d -P --name nginx-test nginx
[外链图片转存中...(img-GhF3ShXZ-1634096458442)]
创建并进入容器
- docker run -i -t --name centos-test centos /bin/bash
- 创建容器后直接进入,执行exit即可退出,退出后容器也随之关闭
[外链图片转存中...(img-bbyPcIsu-1634096458443)]
单次运行
- docker run -it --rm --name nginx-delete-test nginx
- 容器退出后自动删除容器(适用于测试环境)
传递运行命令
- 容器需要有一个前台运行的进程才能保持容器的运行,通过传递参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令。
- docker run -d centos /usr/bin/tail -f '/ect/hosts'
[外链图片转存中...(img-QGLNSV5A-1634096458444)]
容器的启动和关闭
- docker stop 2455ec4067d5
- docker start 2455ec4067d5
[外链图片转存中...(img-jVO79vHY-1634096458444)]
进入到正在运行的容器
使用attach命令
- 使用方式为 docker attach 容器名,attach 类似于 vnc, 操作会在各个容器界面显示所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭且使用 exit 退出后容器关闭,不推荐使用需要进入到有 shell 环境的容器,比如 centos 为例:
命令格式
docker attach [选项] 容器
--detach-keys string #覆盖用于分离容器的键序列
--no-stdin #不附加STDIN
--sig-proxy #代理所有接收到的进程信号(默认为true)
- 测试页面是否同步
[外链图片转存中...(img-hq6UyFn3-1634096458445)]
[外链图片转存中...(img-BRUdg8Lq-1634096458445)]
使用exec命令
- docker exec -it ba81ec83466c bash
- 执行单词命令与进入容器,不是很推荐此方式,虽然exit退出容器还在运行。
[外链图片转存中...(img-K1upcWUv-1634096458445)]
使用master命令
- 推荐使用此方式 nsenter 命令需要通过 PID 进入到容器内部,不过可以使用docker inspect 获取到容器的 PID:
yum -y install nsenter #centos
apt -y install nsenter #ubuntu
---------------------------
命令格式
docker inspect [选项] NAME|ID [NAME|ID...]
-f,--format string #使用给定的Go模板格式化输出
-s,--size #如果类型是container,则显示总文件大小
--type string #返回指定类型的JSON
- docker inspect ba81ec83466c
[外链图片转存中...(img-iBH3puiu-1634096458446)]
//Example
root@bj-magedu-v-study-14:~# docker inspect -f "{{.NetworkSettings.IPAddress}}" ba81ec83466c
172.17.0.2
root@bj-magedu-v-study-14:~# docker inspect -f "{{.State.Pid}}" ba81ec83466c
14582
----------------------------
//获取到了某个docker容器的PID,可以通过PID进入到该容器里
root@bj-magedu-v-study-14:~# nsenter -t 14582 -m -u -i -n -p
[root@ba81ec83466c /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
脚本方式
vim ./into_docker.sh
1 #!/bin/bash
2 into_docker(){
3 NAME_ID=$1
4 PID=$(docker inspect -f "{{.State.Pid}}" ${NAME_ID})
5 nsenter -t ${PID} -m -u -i -p
6 }
7 into_docker $1
------------------------------------
chmod a+x ./into_docker.sh
-----------------------------
./into_docker.sh centos-test
-----------------------------
[外链图片转存中...(img-Ww3GXm8Q-1634096458446)]
[外链图片转存中...(img-E2QSmpNW-1634096458447)]
查看容器内部的hosts文件
root@bj-magedu-v-study-14:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ba81ec83466c centos "/bin/bash" 38 minutes ago Up 38 minutes centos-test
root@bj-magedu-v-study-14:~# docker exec -it centos-test bash
[root@ba81ec83466c /]# 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.2 ba81ec83466c #默认会将实例的ID添加到自己的hosts文件
[外链图片转存中...(img-zQz8uwU7-1634096458447)]
批量关闭正在运行的容器
//正常关闭所有运行中的容器
docker stop $(docker ps -a -q)
docker stop `docker ps -a -q`
批量强制关闭正在运行的容器
//强制关闭所有运行中的容器
docker kill $(docker ps -a -q)
docker kill `docker ps -a -q`
批量删除已退出容器
docker rm -f `docker ps -a -q -f status=exited`
批量删除所有容器
docker rm -f $(docker ps -a -q)
docker rm -f `docker ps -a -q`
指定容器DNS
- DNS 服务,默认采用宿主机的dns地址
- 1.将 dns 地址配置在宿主机
- 2.将参数配置在 docker 启动脚本里面 --dns 1.1.1.1
//Example
docker run -it --rm --dns 223.6.6.6 centos bash
[外链图片转存中...(img-zQJ0I6CD-1634096458448)]