首页 > 其他分享 >Docker 基础:Dockerfile & docker-compose

Docker 基础:Dockerfile & docker-compose

时间:2023-11-10 14:34:30浏览次数:35  
标签:容器 compose Dockerfile nginx usr Docker local docker

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 [email protected]
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 所在目录执行


标签:容器,compose,Dockerfile,nginx,usr,Docker,local,docker
From: https://blog.51cto.com/u_64214/8298848

相关文章

  • linux系统centos7安装docker
    1、Docker官网安装地址https://docs.docker.com/engine/install/centos/#prerequisites2、离线安装下载地址https://download.docker.com/linux/static/stable/x86_64/3、使用yum工具安装如果之前安装需要先卸载sudoyumremovedocker\docker-cl......
  • docker隔离实现
    docker容器之间的隔离实现docker容器之间隔离:命名空间控制组网络虚拟化联合文件系统命名空间pidnamespace:进程隔离netnamespace:管理网络接口ipcnamespace:管理进程通信资源mntnamespace:管理文件系统挂载utsnamespace:隔离内核和版本标识(unixtimesha......
  • docker mysql
    dockerrun-d--namemysql--restart=always--privileged=true\-v/opt/mysql/log:/var/log/mysql\-v/opt/mysql/data:/var/lib/mysql\-v/opt/mysql/conf.d:/etc/mysql/conf.d\-v/etc/localtime:/etc/localtime:ro\-eMYSQL_ROOT_PASSWORD=123456-p33......
  • docker-部署granfana
    1.下载镜像dockerpullgrafana/grafana:8.3.3 2.创建挂载点dockervolumecreategrafana-storage3.启动容器(这里已经创建网络环境使用现有的)dockerrun-dit-p3000:3000\--privileged=true\--name=grafana\--restartalways\--networkzbx_ne......
  • 通过运行中的容器生成 Docker Compose 配置文件
    背景笔者之前有一次不小心删除了原始的docker-compose.yml文件,不过正在运行的Docker容器还在,找了许久,发现一个方法可以从这些容器中生成一个等效的DockerCompose配置文件。本文将介绍使用autocompose工具从正在运行的容器中反向生成docker-compose.yml文件。安装所需工......
  • zabbix基于docker容器部署配置企业微信机器人告警实例
    配置zabbixserver1.先在企业微信内创建机器人 2.查看webhook地址  3.找到脚本执行目录 grep-Ev'^$|#'/etc/zabbix/zabbix_server.conf|grep^A 4.进入默认的脚本存放路径cd/usr/lib/zabbix/alertscripts 5.新建wechat.p......
  • 为zabbix_server_docker容器安装Python 3完善机器人告警脚本环境
    1.安装Python3dnfinstallpython3 2.要验证安装,请输入以下命令检查Python版本:python3--version 3.建立软连接:ln-s/usr/bin/python3.6/usr/bin/python  4.安装epel:dnfinstallpython3-devel-y 5.启用epel:dnfins......
  • 修改运行中的docker容器的端口映射的三种方式
    前言在dockerrun创建并运行容器的时候,可以通过-p指定端口映射规则。但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改。当dockerstart运行容器后并没有提供一个-p选项或设置,让你修改指定端口映射规则。那么这种情况我们该怎么处理呢?方法一:删除原有容器,重新建新容......
  • docker安装es8.11
    一、安装esdocker拉取要指定版本标签,不能用lastest,官方文档目前最新是8.11,就决定安装这个版本的,主要是注意改下配置文件#高版本安装Kibana的时候需要和ElasticSearch在同一网段内dockernetworkcreatees-net#给映射文件夹授权chmod-R775/data/es#单节点模式,9200端口(......
  • docker在centos7下的安装
    1.安装/升级Docker客户端#step1:安装必要的一些系统工具sudoyuminstall-yyum-utilsdevice-mapper-persistent-datalvm2#Step2:添加软件源信息sudoyum-config-manager--add-repohttp://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#Step3:更......