在这幅图中,我们可以看到,Docker 容器的生命周期里分为五种状态,其分别代表着:
Created:容器已经被创建,容器所需的相关资源已经准备就绪,但容器中的程序还未处于运行状态。
Running:容器正在运行,也就是容器中的应用正在运行。
Paused:容器已暂停,表示容器中的所有程序都处于暂停 ( 不是停止 ) 状态。
Stopped:容器处于停止状态,占用的资源和沙盒环境都依然存在,只是容器中的应用程序均已停止。
Deleted:容器已删除,相关占用的资源及存储在 Docker 中的管理信息也都已释放和移除。
创建容器
docker create nginx1.12
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker create mysql
27e4914213a2a7ea1c3408edd68681e68f1ef3730a4a71a370ee7d564f00559a
docker create --name mysql0 mysql
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker create --name mysql0 mysql
a33806d65b3d862eea01c4a6db0d66597280c471d77848ce5d6a8890b3432cf7
启动容器
docker start mysql0
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker start mysql0
mysql0
在 Docker 里,还允许我们通过 docker run 这个命令将 docker create 和 docker start 这两步操作合成为一步,进一步提高工作效率。
docker run --name mysql0 -d mysql (-d 或 --detach 这个选项告诉 Docker 在启动后将程序与控制台分离,使其进入“后台”运行。)
docker run --name mysql0 -d mysql
89f2b769498a50f5c35a314ab82300ce9945cbb69da9cda4b022646125db8ca7
查看容器内容
docker ps -a (-a或-all表示查看所有)
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6647f2a5fdcc redis "docker-entrypoint.s…" 9 seconds ago Up 8 seconds 6379/tcp redis
a33806d65b3d mysql "docker-entrypoint.s…" 12 minutes ago Exited (1) 5 minutes ago mysql0
27e4914213a2 mysql "docker-entrypoint.s…" 14 minutes ago Created quirky_noether
停止和删除容器
docker stop mysql0 容器停止
mysql0
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6647f2a5fdcc redis "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 6379/tcp redis
a33806d65b3d mysql "docker-entrypoint.s…" 19 minutes ago Exited (1) 32 seconds ago mysql0
27e4914213a2 mysql "docker-entrypoint.s…" 21 minutes ago Created quirky_noether
docker rm mysql0 删除容器
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker rm mysql0
mysql0
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6647f2a5fdcc redis "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 6379/tcp redis
27e4914213a2 mysql "docker-entrypoint.s…" 22 minutes ago Created quirky_noether
进入容器
docker exec
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker exec redis more /etc/hostname
::::::::::::::
/etc/hostname
::::::::::::::
6647f2a5fdcc
通过bash或sh进入容器内部
[root@iZ2ze3gye2rcpntgyzryzbZ ~]# docker exec -it redis bash
root@6647f2a5fdcc:/data#
在借助 docker exec 进入容器的时候,我们需要特别注意命令中的两个选项不可或缺,即 -i 和 -t ( 它们俩可以利用简写机制合并成 -it )。
其中 -i ( --interactive ) 表示保持我们的输入流,只有使用它才能保证控制台程序能够正确识别我们的命令。而 -t ( --tty ) 表示启用一个伪终端,形成我
们与 bash 的交互,如果没有它,我们无法看到 bash 内部的执行结果。
衔接到容器
docker attach redis