无意中接触到 docker,知道 docker 可以在服务器上部署各种环境,从而解决无需在服务器上安装各种软件的问题,只需要在容器中安装即可,对搭建运行环境非常友好,于是自己就摸索着学习 docker
第三章 Docker 入门
3.2 运行容器
docker run -it ubuntu /bin/bash
docker ps 查看正在运行的容器
docker ps -a 查看当前系统中所有容器
3.4 容器命名
docker run --name bob_the_container -it ubuntu /bin/bash
3.5 重新启动已经停止的容器
docker restart <container_name>
docker restart <container_id>
ctrl+p+q 退出不关闭容器
exit 退出关闭容器
3.6 重新附着到容器的会话上
docker attach <container_name>
docker attach <container_id>
3.7 创建守护式容器
守护式容器没有交互式会话,非常适合运行程序和服务
docker run --name daemon_dave -d ubuntu
-d 参数 容器会在后台运行
3.8 容器内部都在干什么
用 docker logs 命令获取容器运行日志
docker logs daemon_dave
docker logs --tail 10 daemon_dave # 获取日志最后10条内容
3.9 查看容器内的进程
docker log daemon_dave
3.10 在容器内运行
docker exec -d daemon_dave touch /etc/new_config_file
3.11 停止守护式容器
docker stop daemon_dave
3.12 自动重启容器
设置开机自动重启容器
docker run --restart=always --name daemon-dave -d ubuntu
–restart=on-failure:5 重启 5 次
3.13 深入容器
docker inspect daemon-dave
第四章 使用 docker 镜像和仓库
4.2 列出镜像
docker images
Docker Hub 中有两种类型仓库 用户仓库和顶层仓库
用户仓库由用户名和仓库名两部分构成 如:jesse/monitor
4.4 查找镜像
docker search ubuntu
4.5 构建镜像
构建镜像的两种方式
- 使用 docker commit 命令
- 使用 docker build 命令和 Dockerfile 文件
4.5.2 使用 docker commit 命令创建镜像
先获取容器 id
docker ps -lq #8e1f4fcd97c6
docker commit -m="a new custom image" --author="jesse" 8e1f4fcd97c6 jesse/monitor:webserver
-m 新镜像的提交信息
-author 作者
webserver 镜像标签
4.5.4 基于 Dockerfile 构建新镜像
新建 Dockerfile 文件
# Version 0.1
# 基础镜像
FROM centos:7
# 镜像操作命令
RUN yum update -y
RUN yum install epel-release -y
RUN yum install nginx -y
编辑完成后
docker build -t static_web .
-t 参数设置仓库和镜像
. 是指运行当前目录下的 Dockfile 文件
也可以使用-f path/to/file 指明 dockerfile 文件
也可以使用远程仓库的 dockerfile
docker build -t "miror-study/ubuntu" git@github.com:jesse121/docker
4.5.10 Dockerfile 指令
- CMD
用于指定一个容器启动时要运行的命令
CMD ["bin/bash","-l"]
docker run 命令参数可以覆盖 CMD 指令
-
ENTRYPOINT
ENTRYPOINT 指令提供的命令不容易在启动时被容器覆盖
docker run 命令行中指定的任何参数都会被当作参数再次传递给 ENTRYPOINT 指令中的命令 -
WORKDIR
用来在从镜像创建一个新容器时,在容器内部设置一个工作目录
可以通过-w 标志在运行时覆盖工作目录
docker run -it -w /var/log ubuntu pwd
- ENV
用来在镜像构建过程中设置环境变量,这个新的环境变量可以在后续的任何 RUN 指令中使用
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR
也可以使用 docker run 命令行中的-e 标志来传递环境变量
-
USER
USER 指令用来指定该镜像会以什么样的用户去运行,默认用户是 root
也可以在 docker run 命令中通过-u 选项来覆盖该指令指定的值 -
VOLUME
用来向基于镜像创建的容器添加卷
卷功能让我们可以将数据,数据库或者其他内容添加到镜像中而不是将这些内容提交到镜像中,并且允许我们在多个容器间共享这些内容
VOLUME ["/opt/project"]
- ADD
用来将构建环境下的文件和目录复制到镜像中
ADD software.lic /opt/application/software.lic
ADD 指令会使得构建目录缓存变得无效,如果通过 ADD 指令向镜像中添加一个文件或者目录,那么这将使得 dockerfile 中的后续指令都不能继续使用之前的构建缓存
- COPY
copy 指令非常类似于 ADD,他们根本不同的是 COPY 只关心在构建上下文中复制本地文件,而不去做文件提取和解压工作
COPY conf.d/ /etc/apache2/
- ONBUILD
ONBUILD 指令能为镜像添加触发器,当一个镜像被用作其他镜像的基础镜像时,该镜像中的触发器将会被执行
第 7 章 Docker 编配和服务发现
安装 Docker Compose
Mac 和 Windows 的 Docker 桌面版和 Docker Toolbox 已经包括 Compose 和其他 Docker 应用程序,因此 Mac 和 Windows 用户不需要单独安装 Compose。
docker-compose.yml 文件
version: "3"
services:
app:
build: . # 相当于 docker build .
container_name: fed-monitor
ports:
- "3000:3000"
depends_on:
- mongo
mongo:
image: "mongo"
Docker Compose 常用命令
启动所有服务
docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
命令选项[options]
- -d 指定在后台以守护进程方式运行服务容器
- -no-color 设置不使用颜色来区分不同的服务器的控制输出
- -no-deps 设置不启动服务所链接的容器
- -force-recreate 设置强制重新创建容器,不能与–no-recreate 选项同时使用。
- –no-create 若容器已经存在则不再重新创建,不能与–force-recreate 选项同时使用。
- –no-build 设置不自动构建缺失的服务镜像
- –build 设置在启动容器前构建服务镜像
- –abort-on-container-exit 若任何一个容器被停止则停止所有容器,不能与选项-d 同时使用。
- -t, --timeout TIMEOUT 设置停止容器时的超时秒数,默认为 10 秒。
- –remove-orphans 设置删除服务中没有在 compose 文件中定义的容器
- –scale SERVICE=NUM 设置服务运行容器的个数,此选项将会负载在 compose 中通过 scale 指定的参数。
列出项目中当前的所有容器
docker-compose ps [options] [SERVICE...]
停止服务
docker-compose stop [options] [SERVICE...]
重启项目中的服务
docker-compose restart [options] [SERVICE...]
原文链接: https://jesse121.github.io/blog/articles/2022/12/18.html
版权声明: 转载请注明出处.