全文转自 https://www.cnblogs.com/jsonhc/p/7766561.html
Docker的container
- 运行一个container的本身就是开启一个具有独立namespace的进程
- 进程有自己的网络,文件系统等
- docker通过run命令来启动一个container
- 运行一个container必须要指定一个image作为初始化的文件系统
对于不存在的image,docker会自动去registry里面下载对应的image,然后再运行container
- docker正在运行的容器
- 物理机上的进程:
可以看到二者的uuid是相同的
如果image里面包含了CMD的命令,那么在启动container的时候,不需要指定command,否则会使用指定的command来覆盖image中的CMD
- 比如tomcat镜像里面的命令自动是执行
catalina.sh run
,启动容器就会自动启动tomcat,如果启动的时候指定了命令就会覆盖原始的,导致tomcat不能启动! - 正常启动
docker run -d -p 8088:8080 tomcat
进程如下:
[root@localhost ymsk]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6a2a64495275 tomcat "catalina.sh run" 10 minutes ago Up 10 minutes 0.0.0.0:8088->8080/tcp elated_shockley
会自动启动tomcat服务
- 覆盖启动'docker run -p 8088:8080 -t -i tomcat /bin/bash' 进程如下:
[root@localhost ymsk]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
839498ec771b tomcat "/bin/bash" 12 minutes ago Exited (130) 10 minutes ago peaceful_liskov
不会自动启动tomcat服务
查看本地现有镜像: