举例:wordpress
拉取镜像
[root@localhost ~]# docker pull wordpress
查看镜像
[root@localhost ~]# docker images
把镜像跑起来
[root@localhost ~]# docker run -d --name wc -p 8080:8080 --restart=always docker.io/wordpress:latest
查看正在运行的镜像们
[root@localhost ~]# docker ps -a
创建完成后进入容器
-i : 交互式操作
-t : 终端
[root@localhost ~]# docker exec -it <容器名称或ID> /bin/bash
退出该容器可以用exit或Ctrl+P+Q
停止一个容器
[root@localhost ~]# docker stop <容器ID>
删除这个容器
[root@localhost ~]# docker rm -f <容器名称或ID>
搜索关键字对应的容器列表
[root@localhost ~]# docker search <名称关键字>
/////////////////////////////////////////////
那么为什么有些容器在docker run的时候需要接 -it ,有些不需要?
举例:
[root@localhost ~]# docker run -d -it --name wc -it --restart=always -p 8080:8080 docker.io/centos:7 /bin/bash
原因刨析:因为像centos、ubuntu等这些系统镜像起的容器都会启动时执行bash这个命令,进入后台运行,被docker认为是不活跃的容器进程,就会关闭容器,这样我们docker ps的时候就会发现容器没有起来。
刨析:
我们以制作镜像的角度解释为什么起容器的时候会执行bash这个命令
制作镜像的时候都会需要一个Dockerfile文件
这是Dockerfile文件内容:
base镜像
FROM busybox
设置环境变量
ENV sg WANG
启动容器时执行的命令我们,首先执行/bin/sh这个解释器,再sleep 120秒
CMD ["/bin/sh", "-c", "echo wangwenlong;sleep 120;echo ok"]
生成一个基于base镜像busybox的镜像
[root@localhost busybox]# docker build -t busybox .
创建并运行一个容器
[root@localhost busybox]# docker run -d --name w-busybox busybox
查看该容器是否运行
[root@localhost busybox]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
596f2753e6b5 busybox "/bin/sh -c 'echo wa…" 2 seconds ago Up 1 second w-busybox
查看该容器中运行的进程
[root@localhost busybox]# docker top w-busybox
UID PID PPID C STIME TTY TIME CMD
root 10382 10363 1 18:09 ? 00:00:00 /bin/sh -c echo wangwenlong;sleep 120;echo ok
root 10412 10382 0 18:09 ? 00:00:00 sleep 120
120秒后
再次查看该容器会发现该容器已经停止运行
[root@localhost busybox]# docker top w-busybox
Error response from daemon: Container 596f2753e6b500ce05638995af11c8aae6151615f9a70c2fbbbc79a43c47c3f6 is not running
以上内容都说明了如果build的那个镜像的Dockerfile文件有CMD ["解释器"]
一般都是linux系统作为镜像的时候会有上面这个
此时我们就要使用以下进行创建运行容器的命令
[root@localhost busybox]# docker run -it
该容器便可以运行起来而不会被docker关闭,因为bash模式下会进入后台运行,docker认为这是个不活跃的容器进程,就会关闭该容器