0
点赞
收藏
分享

微信扫一扫

Docker 基础:Dockerfile & docker-compose

沐之轻语 2023-11-10 阅读 35

Dockerfile

Dockerfile 是实现自定镜像的一种手段,通过编写 Dockerfile,来编译成自己想要的镜像。

FROM {image_name}:{image_tag}  # 指定基础镜像
MAINTAINER  {userinfo}  # 维护人信息
USER {username}  # 指定 RUN、CMD 或 ENTRYPOINT 运行时使用的用户
WORKDIR {workdir}  # 为后续 RUN、CMD 或 ENTRYPOINT 运行指定工作目录
ENV {key} {value}  # 为后续的 RUN 指令提供一个环境变量
RUN {bash command}  # 要执行的命令,RUN 一次镜像叠加一次(大小),多个命令可以用 && 连接,以免镜像太大


ADD {local_file|dir} {container_dir}  # 将本地文件/目录拷贝到容器的某个目录里,local_file|dir 可以是本地文件,也可以是一个 URL
COPY {local_file} {container_file}  # 将本地文件拷贝到容器,不支持 URL


EXPOSE {ports}  # 指定要映射的端口,可以写多个。需配合 -P 参数使用,即启动容器时加上 -P 参数,如果想知道你个具体的映射端口,可以用 -p 指定
VOLUME ["{local_dir}"]  # 创建一个可以从本机或其他容器挂载的挂载点


CMD ["command", "param1", "param2"]  # 指定容器启动时用到的命令,只能有一条!
ENTRYPOINT ["command", "param1", "param2"]  # 指定容器启动时用到的命令,类似 CMD,只能写一条,不同的是:CMD 可以被 docker run 指令覆盖,而 ENTRYPOINT 不可以被覆盖

Dockerfile 示例:

FROM centos
MAINTAINER afei afei@126.com
RUN yum update && yum install -y net-tools python3 gcc
ADD http://nginx.org/download/nginx-1.23.2.tar.gz /usr/local/src/
RUN cd /usr/local/src && tar zxvf nginx-1.23.2.tar.gz && mkdir -p /usr/local/nginx
RUN cd nginx-1.23.2 && ./configure --prefix=/usr/local/nginx && make && make install
COPY index.html /usr/local/nginx/html/index.html
COPY index2.html /usr/local/nginx/html/index2.html
EXPOSE 80
ENTRYPOINT /usr/local/nginx/sbin/nginx -g "daemon off;"  # 确保服务前台启动,如果将服务放到后台,容器会终止

Tips:docker 容器默认会把容器内部第一个进程,也就是 pid=1 的程序作为docker容器是否正在运行的依据,如果docker容器中 pid=1 的进程挂了,那么 docker 容器便会直接退出,也就是说 Docker容器中必须有一个前台进程,否则认为容器已经挂掉。

编译镜像:

$ docker build -t {iamge_name}:{image_tag} -f /path/to/Dockerfile {workdir}  # -f:指定要使用的 Dockerfile 文件路径;workdir:指定当前命令运行的工作目录

docker-compose

Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。在 Compose 中,可以使用YAML 文件来配置应用程序的服务。然后,运行一条命令,即可从配置中创建并启动所有服务。使用 Compose 可在一台主计算机上方便地协调多个容器映像。

安装 docker-compose

安装:https://dockerdocs.cn/compose/install

$ curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
$ docker-compose version  # 检查安装结果

docker-compose.yaml

docker-compose.yaml 示例:

version: '3'


services:
  wp:  # 服务名称
    image: wordpress:latest # 镜像版本
    ports:
      - ${IP}:${PORT}:80 # 端口映射
    volumes:
      - ./config/php.conf.ini:/usr/local/etc/php/conf.d/conf.ini
      - ./wp-app:/var/www/html # Full wordpress project
    environment:  # 环境配置
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: "${DB_NAME}"
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: "${DB_ROOT_PASSWORD}"
    depends_on:  # 服务依赖关系,会先启动被依赖的服务
      - db
    links:
      - db


  db:  # 服务名称
    image: mysql:latest  # 镜像版本
    ports:
      - ${IP}:3306:3306  # 端口映射
    command: [
        '--default_authentication_plugin=mysql_native_password',
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_unicode_ci'
    ]
    volumes:
      - ./wp-data:/docker-entrypoint-initdb.d
      - db_data:/var/lib/mysql  # 数据持久化
    environment:
      MYSQL_DATABASE: "${DB_NAME}"
      MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"


volumes:
  db_data:

使用 docker-compose.yaml,操作命令:

$ docker-compose up -d  # 在 docker-compose.yaml 文件所在目录执行
$ docker-compose --help  # 查看 docker-compose 命令使用方法,使用 docker-compose 命令管理容器需要进入到项目对应的 docker-compose.yaml 所在目录执行


举报

相关推荐

0 条评论