一、容器生命周期管理
1、查看所有的容器:docker ps -a
2、启动容器:
启动已被停止的容器:docker start <容器 ID>
停止运行中的容器:docker stop <容器 ID>
重启容器:docker restart <容器 ID>
3、杀掉一个运行中的容器:docker kill -s KILL<容器 ID>
4、删除容器:docker rm
强制删除容器:docker rm -f<容器 ID1><容器 ID2>
移出容器间的网络连接:docker rm -l<容器 ID>
删除与容器关联的卷:docker rm -v<容器 ID>
删除所有已经停止的容器:docker rm $(docker ps -a -q)
批量删除的方式:https://blog.csdn.net/jiangeeq/article/details/79499324
5、暂停/恢复容器提供服务:docker pause/unpause<容器 ID>
6、使用docker镜像nginx:latest创建一个容器,并将容器命名为myrunoob且不启动:docker create --name myrunoob nginx:latest
7、创建一个新的容器并运行一个命令:docker run
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx
docker run --name mynginx -d nginx:latest
使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口
docker run -P -d nginx:latest
绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
二、容器使用操作
1、进入容器:
docker attach<容器 ID>
docker exec<容器 ID>:推荐使用 此命令,因为此退出容器终端,不会导致容器的停止。经常使用“-it”
2、查看容器的进程信息:docker top<容器名>
3、查看容器日志:
docker logs -f<容器名>:实时跟踪容器的日志输出
docker logs --since="2020-07-01" --tail=10<容器名>:查看容器从2020年7月1日后的最新10条日志
4、查看容器端口映射情况:docker port<容器名>
5、查看 Docker 的底层信息(配置和状态信息):docker inspect <容器名/ID>
三、镜像仓库
1、登录镜像仓库:docker login -u 用户名 -p 密码;登出则是:docker logout
2、从镜像仓库中拉取或者更新指定镜像:docker pull <镜像目标>;如果加”-a“则是下载所有镜像
3、将本地的镜像上传到镜像仓库(要先登陆到镜像仓库):docker push <镜像目标>
4、查找镜像:docker search
四、本地镜像管理
1、列出本地镜像中REPOSITORY为ubuntu的镜像列表:docker images ubuntu;不加目标参数则列出本地所有镜像列表:docker images
2、删除本地一个或多个镜像:docker rmi -f runoob/ubuntu:v4
3、使用 Dockerfile 创建镜像:
使用当前目录的 Dockerfile 创建:docker build -t <标签名> .
使用URL的 Dockerfile 创建:docker build github.com/creack/docker-firefox
通过Dockerfile 文件的位置创建:docker build -f /path/to/a/Dockerfile .
4、查看指定镜像的创建历史:docker history
5、将指定镜像保存成 tar 归档文件以及导入使用:docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3;docker load -inputmy_ubuntu_v3.tar
五、制作Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。就像脚本一样会自动执行我们构建镜像所需的所有指令
基础指令:
FROM <定制需要的基础镜像,如运行我们的python脚本:python:3.8-alpine>
RUN <执行后面跟着的命令行命令>:RUN 、RUN [exec 格式:"可执行文件", "参数1", "参数2"]
WORKDIR <工作目录路径>:指定工作目录。用 WORKDIR 指定的工作目录,会在构建镜像的每一层中都存在。
COPY <原路径> <目标路径>:从上下文目录中复制文件或者目录到容器里指定路径
CMD["<可执行文件或命令>","","",...] :类似于 RUN 指令,用于运行程序,是在docker run 时运行,而RUN是在docker build时运行。为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
ENTRYPOINT ["","","",...]:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序。
ENV = =...:设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。
VOLUME <路径>:定义匿名数据卷。在启动容器时忘记挂载数据卷,会自动挂载到匿名卷。避免容器变大,丢失重要的数据
注意1:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。而【以 && 符号连接命令】,这样执行后,就只会创建 1 层镜像。
注意2:如果 Dockerfile 中如果存在多个 CMD/ENTRYPOINT 指令,仅最后一个生效。
通过上述步骤,定制好了一个Dockerfile后,在 Dockerfile 文件的存放目录下,执行构建动作:
如:通过目录下的 Dockerfile 构建一个 nginx:test(镜像名称:镜像标签)。
docker build -t nginx:test .
注意3:命令最后的点,是上下文路径,指 docker 在构建镜像,有时候想要使用到本机的文件(比如复制),docker build 命令得知这个路径后,会将路径下的所有内容打包。
六、docker实践操作案例
1、docker容器中运行一个 Python Flask 应用来运行一个web应用
首先载入镜像:docker pull training/webapp<镜像目标>
后台运行容器,并将容器内部使用的网络端口随机映射到我们使用的主机上:docker run -d -P training/webapp python app.py
docker ps 查看容器,获取端口信息
然后网页打开:主机地址+获取的主机端口