ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 1.容器操作 ### 1.1.运行容器 ``` docker run -i -t ubuntu /bin/bash -i:表示容器中的STDIN是开启的 -t:分配伪TTY 只有在指定的/bin/bash命令处于运行状态的时候,容器才会处于运行状态。一旦退出容器,/bin/bash命令也就结束了,容器随之停止。 ``` ![](https://img.kancloud.cn/2a/5a/2a5a12d887f4edf747ae91362b9a3667_749x49.png) ### 1.2.容器命名 创建容器时会随机生成一个名称,也可以使用`--name`参数指定容器名。 ``` docker run --name container_name -i -t ubuntu /bin/bash ``` ![](https://img.kancloud.cn/9f/8d/9f8de032a0011acc47fe6406c6e1501e_1169x142.png) ### 1.3.重新启动已停止的容器 ``` // 重启 docker start ubuntu_dev 或 docker start container_id ``` 容器重新启动后运行一个交互式会话shell,可以用docker attach 命令重新附着到该容器的会话上。 ``` docker attach ubuntu_dev ``` ![](https://img.kancloud.cn/0a/49/0a491902d99ad01a0115dcdcc7249650_1060x189.png) ### 1.4.创建守护式容器 ``` docker run --name daemon_dave -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1; done" -d:容器会在后台运行。 -c:在容器里运行一个while循环,每隔一秒打印hello world。 ``` ``` // docker logs 获取容器的日志 docker logs daemon_dave // -f参数来监控Docker的日志 docker logs -f daemon_dave // 获取最后5行内容 docker logs --tail 5 daemon_dave // 跟踪最新日志 docker logs --tail 0 -f daemon_dave // -t 给日志加上时间戳 docker logs -ft daemon_dave ``` ![](https://img.kancloud.cn/ef/27/ef278bbe42420a0bcdce9c655eafaff6_544x215.png) ``` // 查看容器内的进程 docker top daemon_dave ``` ![](https://img.kancloud.cn/d8/43/d843371c93ecd3b12e2ff67d5e71a57d_844x187.png) ``` // 在容器内部运行进程,在容器内部创建一个文件 docker exec -d daemon_dave touch /etc/test_file // 在容器内创建一个新的bash会话 docker exec -t -i daemon_dave /bin/bash ``` ### 1.5.自动重启容器 ``` docker run --restart=always --name ubuntu_dev -d ubuntu /bin/bash --restart:会检查容器的退出代码,重启容器,默认不会自动重启 --restart=always:无论容器的退出代码是什么,都会自动重启。 --restart=on-failure:当容器的退出代码是0时才会自动重启 --restart=on-failure:5:当容器退出代码非0时,自动重启5次。 ``` ### 1.6.其他常用命令 ``` // 删除容器 docker rm container_id 或 docker rm names // 删除所有容器 docker rm `docker ps -a -q` -q:返回容器ID // 查看正在运行的容器 docker ps // 查看所有容器 docker ps -a // 获取容器信息,包括名称、命令、网络配置等。 docker inspect names -f 或者--fromat参数指定查询信息 docker inspect --format='{{ .State.Running }}' names // 查看容器启动时的完整Command docker ps -a --no-trunc ``` ### 1.7.构建镜像 `docker commit`(不推荐) ``` // 创建一个需要定制的容器 docker run -it ubuntu /bin/bash // 在容器内执行 apt-get -y update apt-get install apache2 // 退出容器执行docker commit docker commit container_id sunlightlei/apache2 // 查看刚刚创建的容器的ID docker ps -l -q // 可以添加描述,使用方法类似git提交 docker commit -m="first commit" --author="sunl" container_id sunlightlei/apache2 ``` `Dockerfile`(推荐) ``` // 创建工作目录 mkdir workspace && cd workspace // 编写Dockerfile vi Dockerfile # Version: 0.0.1 FROM ubuntu MAINTAINER sunl "*****@**.com" RUN apt-get update RUN apt-get install -y nginx RUN echo 'Hi, I am in your container' > /usr/share/nginx/html/index.html EXPOSE 80 // 构建镜像 docker run build -t="sunlightlei/nginx" // 构建镜像带标签 docker run build -t="sunlightlei/nginx:v1" ``` **构建缓存** 由于每一步的构建过程都会将结果提交为镜像,之前的镜像层看做缓存。所以如果第4步出了问题,重新构建时将从这里开始。 如果不用缓存,使用`--no-cache`。 **构建缓存可以实现简单的Dockerfile模板** ### 1.8.从新镜像启动容器 ``` docker run -d -p 80 --name webserver sunlightlei/nginx -g "daemon off;" // 查看端口映射情况 docker ps -l // 将容器内的80端口绑定的宿主机的指定端口上 docker run -d -p 8080:80 --name webserver sunlightlei/nginx -g "daemon off;" // 将容器内的80端口绑定到宿主机的127.0.0.1这个IP的80端口上 docker run -d -p 127.0.0.1:80:80 --name webserver sunlightlei/nginx -g "daemon off;" // 可以通过在端口绑定时绑定使用/udp后缀来指定UDP端口 // 使用-P参数,可以对外开放Dockerfile中的EXPOSE指令中设置的所有端口。绑定的宿主机一个随机端口。 docker run -d -P --name webserver sunlightlei/nginx -g "daemon off;" ``` ### 1.9.容器的生命周期 容器的生命周期为5种: 1. created:初建状态 2. running:运行状态 3. stopped:停止状态 4. paused: 暂停状态 5. deleted:删除状态 通过docker create 命令生成的容器状态为初建状态; 初建状态通过docker start转换为运行状态; 运行状态通过docker stop转换为停止状态; 处于停止状态的容器通过docker start转换为运行状态; 运行状态的容器通过docker pause转换为暂停状态; 暂停状态通过docker unpause 转换为运行状态。 四态容器都可以删除。