Torres-tao  

说明:有了镜像才能创建容器。

1、创建容器并启动

docker run [options] image

参数说明:

  • --name=”Name”:容器名字,tomcat01,tomcat02,用来区分容器
  • -d:守护式(后台)运行
  • -it:使用交互式方式运行,进入容器查看内容
  • -p:指定容器的端口
  • -P(大写):随机指定端口

当使用docker run命令来创建并启动容器时,docker在后台运行的标准操作如下:

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  2. 利用镜像创建一个容器,并启动该容器
  3. 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5. 从网桥的地址池配置一个IP地址给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被自动终止

某些时候,执行docker run时因为命令无法正常执行容器会出错直接退出,此时可以查看退出的错误代码。默认情况下,常见的错误代码包括:

  • 125:docker daemon执行出错,例如指定了不支持的docker命令参数
  • 126:所指定命令无法执行,例如权限出错
  • 127:容器内命令无法找到

执行命令后出错,会默认返回命令的退出错误码。

2、进入容器

在使用-d参数启动容器时,容器启动后进入后台,用户无法看到容器中的信息,也无法进行操作。如果需要进入容器进行操作,可使用attach或exec命令。

2.1、attach命令

命令格式为:

docker [container] attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

选项主要如下:

  • --detach-keys[=[]]:指定退出attach模式的快捷键操作,默认是Ctrl+P+Q
  • --no-stdin=true|false:是否关闭标准输入,默认是保持打开
  • --sig-proxy=true|fasle:是否代理收到的系统信号给应用进程,默认是true。

示例:

[root@aliyun ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS         PORTS     NAMES
15fcfffb103c   centos    "/bin/bash"   13 minutes ago   Up 4 seconds             test1
[root@aliyun ~]# docker attach 15fcfffb103c
[root@15fcfffb103c /]# echo "hello world"
hello world

注:使用attach命令有时并不方便,当多个窗口同时attach到同一个容器时,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行操作了

2.2、exec命令

格式:

docker [container] exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]

参数说明:

  • -d,--detach:在容器中后台执行命令
  • --detach-keys=””:指定将容器切回后台的按键
  • -e,--env=[]:指定环境变量列表
  • -i,--interactive=true|false:打开标准输入接收用户输入命令,默认值为false
  • --privileged=true|false:是否给执行命令以高权限,默认值是false
  • -t,--tty=true|false:分配伪终端,默认值是false
  • -u,--user=””:执行命令的用户名或ID

示例:

[root@aliyun ~]# docker exec -it 15fcfffb103c /bin/bash
[root@15fcfffb103c /]# ll
bash: ll: command not found
[root@15fcfffb103c /]# ls -al
total 56
drwxr-xr-x  1 root root 4096 Apr  7 05:57 .
drwxr-xr-x  1 root root 4096 Apr  7 05:57 ..
-rwxr-xr-x  1 root root    0 Apr  7 05:57 .dockerenv
lrwxrwxrwx  1 root root    7 Nov  3  2020 bin -> usr/bin
drwxr-xr-x  5 root root  360 Apr  7 06:10 dev
drwxr-xr-x  1 root root 4096 Apr  7 05:57 etc
drwxr-xr-x  2 root root 4096 Nov  3  2020 home
lrwxrwxrwx  1 root root    7 Nov  3  2020 lib -> usr/lib
lrwxrwxrwx  1 root root    9 Nov  3  2020 lib64 -> usr/lib64
drwx------  2 root root 4096 Sep 15  2021 lost+found
drwxr-xr-x  2 root root 4096 Nov  3  2020 media
drwxr-xr-x  2 root root 4096 Nov  3  2020 mnt
drwxr-xr-x  2 root root 4096 Nov  3  2020 opt
dr-xr-xr-x 99 root root    0 Apr  7 06:10 proc
dr-xr-x---  1 root root 4096 Apr  7 05:57 root
drwxr-xr-x 11 root root 4096 Sep 15  2021 run
lrwxrwxrwx  1 root root    8 Nov  3  2020 sbin -> usr/sbin
drwxr-xr-x  2 root root 4096 Nov  3  2020 srv
dr-xr-xr-x 13 root root    0 Apr  7 06:10 sys
drwxrwxrwt  7 root root 4096 Sep 15  2021 tmp
drwxr-xr-x 12 root root 4096 Sep 15  2021 usr
drwxr-xr-x 20 root root 4096 Sep 15  2021 var
[root@15fcfffb103c /]# pwd 
/

通过指定-it参数来保持标准输入打开,并且分配一个伪终端。通过exec命令对容器执行操作是最为推荐的方式。

3、删除容器

格式:

docker [container] rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]

参数说明:

  • -f:强行终止并删除一个运行中的容器
  • -l:删除容器的连接,但保留容器
  • -v:删除容器挂载的数据卷

默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除正在运行的容器;如果需要删除运行中的容器,加-f参数。

[root@aliyun ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
15fcfffb103c   centos    "/bin/bash"   25 minutes ago   Up 11 minutes             test1
[root@aliyun ~]# docker rm 15fcfffb103c
Error response from daemon: You cannot remove a running container 15fcfffb103cf7ec98f444a7e25bf3d432e21425dd8d9cb444208f32732ca938. Stop the container before attempting removal or force remove
[root@aliyun ~]# docker rm -f 15fcfffb103c
15fcfffb103c
[root@aliyun ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

删除所有的容器:docker rm -f $(docker ps -qa)

4、列举容器

格式:

docker ps

参数:

  • -a:列举所有容器
  • -q:只显示容器的编号
  • -n:列出最近创建的n个容器
[root@aliyun ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
15fcfffb103c   centos    "/bin/bash"   25 minutes ago   Up 11 minutes             test1

5、启动和停止容器

docker start 容器id		#启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止容器
docker kill 容器id		#强制停止当前容器
posted on 2022-04-07 15:12  雷子锅  阅读(137)  评论(0编辑  收藏  举报