容器操作基础命令

容器操作基础命令

命令格式:

docker run [选项] [镜像名] [shell 命令] [参数]

docker run [参数选项] [镜像名称,必须在所有选项的后面] [/bin/echo ‘hello wold’] #单次执行,没有自定义容器名称

docker run centos /bin/echo ‘hello wold’ #启动的容器在执行完 shel 命令就退出了

1、从镜像启动一个容器

会直接进入到容器,并随机生成容器 ID 和名称

root@z2:/opt#  docker run -it docker.io/centos bash
[root@2cc162b4ce58 /]# exit
exit
root@z2:/opt#  docker run -it docker.io/centos bash
[root@2cc162b4ce58 /]# exit
exit
root@z2:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                           PORTS               NAMES
9a38095d25c7        centos              "bash"              37 seconds ago      Up 36 seconds                                        compassionate_thompson

ctrl+p+q 也行 退出容器 不注销 。 exit 直接退出容器

root@z2:/opt# docker run -it docker.io/centos bash
[root@9a38095d25c7 /]# root@z2:/opt# cd  ~

2、显示正在运行的容器

docker ps

3:显示所有容器

​ 包括当前正在运行以及已经关闭的所有容器

docker ps -a

4、删除运行中的容器

docker rm 删除正在运行的容器

docker rm -f 强制删除正在运行的容器

docker rm -fv 强制删除正在运行的容器 并且删除数据目录。

docker rm -f 9a38095d25c7 
5、随机映射端口

​ docker run -P docker.io/nginx

​ 前台启动并随机映射本地端口到容器的 80

​ 前台启动的会话窗口无法进行其他操作,除非退出,但是退出后容器也会退出

​ 随机端口映射,其实是默认从 32768 开始

为什么是容器内的端口是 80,是因为dockerfile 中定义了暴露端口

oot@z2:~# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                   NAMES
49921f78ab97        nginx               "nginx -g 'daemon of…"   About a minute ago   Up About a minute   0.0.0.0:32768->80/tcp   cranky_thompson
ace8c9ee964d        centos              "bash"                   About an hour ago    Up About an hour                            blissful_mayer

测试: curl 127.0.0.1:32768

6、 指定端口映射

默认tcp协议,监听地址:0.0.0.0

方式 1:本地端口 81 映射到容器 80 端口:

docker run -p 81:80 --name nginx-test-port1 nginx 

方式 2:本地 IP:本地端口:容器端口

docker run -p 192.168.10.205:82:80 --name nginx-test-port2 docker.io/nginx

方式 3:本地 IP:本地随机端口:容器端口

docker run -p 192.168.10.205::80 --name nginx-test-port3 docker.io/nginx 

方式 4:本机 ip:本地端口:容器端口/协议,默认为 tcp 协议

docker run -p 192.168.10.205:83:80/udp --name nginx-test-port4 docker.io/nginx

方式 5:一次性映射多个端口+协议:

docker run -p 86:80/tcp -p 443:443/tcp -p 53:53/udp --name nginx-test-port5 docker.io/nginx 
7. 查看容器的日志

docker logs 容器ID/name 一次查看

root@z2:~# docker  logs 49921f78ab97
172.17.0.1 - - [13/May/2020:14:25:40 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"

docker logs -f 容器ID/name 持续查看

root@z2:~# docker  logs -f  49921f78ab97
172.17.0.1 - - [13/May/2020:14:25:40 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.58.0" "-"

8:查看容器已经映射的端口

port List port mappings or a specific mapping for the container

root@z2:~# docker port nginx-test-port5
443/tcp -> 0.0.0.0:443
53/udp -> 0.0.0.0:55
80/tcp -> 0.0.0.0:86

9:自定义容器名称

–name

如果不自定义话,名称是随机的

root@z2:~# docker run -it --name nginx-test nginx
aa5b1f11e70635754fa3c6646c89dc04b7d5753022d439023aa3aee33fda7d5e
root@z2:~# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                                          NAMES
aa5b1f11e706        nginx               "nginx -g 'daemon of…"   22 seconds ago      Up 21 seconds       80/tcp                                                         nginx-test

10. 后台启动容器

-d, --detach Run container in background and print container ID

docker run -d -P --name nginx-test1  docker.io/nginx 
11. 创建并进入容器

创建容器后直接进入,执行 exit 退出后容器关闭

docker run -t -i  --name test-centos2  docker.io/centos /bin/bash

-i, --interactive Keep STDIN open even if not attached

-t, --tty Allocate a pseudo-TTY

12、单次运行

容器退出后自动删除

–rm Automatically remove the container when it exits

  docker   run    -it  --rm  --name nginx-delete-test  docker.io/nginx
13 、传递运行命令

​ 容器需要有一个前台运行的进程才能保持容器的运行,通过传递运行参数是一种方式,另外也可以在构建镜像的时候指定容器启动时运行的前台命令

root@z1:~# docker run -d  centos  /usr/bin/tail -f '/etc/hosts'
405e0d68a703499acbfc5a20c3aeadb7a20a530081aa7229110c0ad6ce10fcf9

mark

mark

14. 容器的启动和关闭
root@z2:~# docker  stop 017fcfa5fdf1
017fcfa5fdf1
root@z2:~# docker  start  017fcfa5fdf1
017fcfa5fdf1
root@z2:~# 
15. 进入到正在运行的容器
1. 使用 attach 命令

​ 使用方式为 docker attach 容器名,attach 类似于 vnc,操作会在各个容器界面显示,所有使用此方式进入容器的操作都是同步显示的且 exit 后容器将被关闭,且使用 exit 退出后容器关闭,不推荐使用,需要进入到有 shell 环境的容器,比如 centos 为例

root@z1:~# docker run -it centos bash
[root@6598e2bdcf85 /]# ls

​ 在另外一个窗口

root@z1:~# docker  attach  6598e2bdcf85 
[root@6598e2bdcf85 /]# touch a.xt 

​ 然后在其中的任何一个窗口操作, 另外一个窗口都可以实时看见

2.使用 exec 命令:

​ 执行单次命令与进入容器,不是很推荐此方式,虽然 exit 退出容器还在运行

docker exec -it  3ff2cc97728b bash
3.使用 nsenter 命令:

推荐使用此方式,nsenter 命令需要通过 PID 进入到容器内部,不过可以使用docker inspect 获取到容器的 PID:

使用docker inspect

-f, --format string Format the output using the given Go template

root@z1:~# docker inspect -f "{{.State.Pid}}" d13333791831
3168

当然也可以取到容器的IP地址

root@z1:~# docker inspect -f "{{.NetworkSettings.IPAddress}}"  d13333791831
172.17.0.3

nsenter 进入容器

root@z1:~#  nsenter -t 3168  -m -u -i -n -p 
[root@d13333791831 /]# 

Run a program with namespaces of other processes.

-t, --target <pid> target process to get namespaces from

-m, --mount[=<file>] enter mount namespace

-u, --uts[=<file>] enter UTS namespace (hostname etc)

-i, --ipc[=<file>] enter System V IPC namespace

-p, --pid[=<file>] enter pid namespace

脚本方式:将 nsenter 命令写入到脚本进行调用,如下

#!/bin/bash
d(){
name_id=$1
pid=$(docker inspect -f "{{.State.Pid }}"  ${name_id}  ) 
nsenter -t ${pid}  -m -u -i -n -p
}

d $1
root@z2:~# bash docker_in.sh 017fcfa5fdf1
[root@017fcfa5fdf1 /]# exit
logout
root@z2:~# 
16. 批量关闭正在运行的容器

docker ps 默认只显示 运行中的容器

docker ps -a 显示所有所有容器

-q 显示容器ID

docker ps -aq 显示所有容器的ID

docker stop $(docker ps -a -q) 

正常关闭所有运行中的容器

17. 批量删除已退出容器
docker rm -f `docker ps -aq -f status=exited`

子命令的参数 -f, --filter filter Filter output based on conditions provided ,,表示基于条件过滤出

18.批量删除所有容器
docker rm -f  $(docker ps -a -q) 
19.批量强制关闭正在运行的容器:
 docker kill $(docker ps -a -q)  
20. 指定容器 DNS:

Dns 服务,默认采用宿主机的 dns 地址一是将 dns 地址配置在宿主机

二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1

docker run -it --rm --dns 223.5.5.5 centos bash 


[root@2dcef6864a19 /]# cat /etc/resolv.conf 
nameserver 223.5.5.5
docker rm -f  $(docker ps -a -q) 
19.批量强制关闭正在运行的容器:
 docker kill $(docker ps -a -q)  
20. 指定容器 DNS:

Dns 服务,默认采用宿主机的 dns 地址一是将 dns 地址配置在宿主机

二是将参数配置在 docker 启动脚本里面 –dns=1.1.1.1

docker run -it --rm --dns 223.5.5.5 centos bash 


[root@2dcef6864a19 /]# cat /etc/resolv.conf 
nameserver 223.5.5.5
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值