IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Dockerfile 和 Docker-compose 学习笔记 -> 正文阅读

[系统运维]Dockerfile 和 Docker-compose 学习笔记

Dockerfile

1、什么是 Dockerfile 文件

官网

通过自定义的命令构建我们自己的镜像

每行指令都会生成一个镜像(中间镜像,用于缓存,不要缓存的话 --no-cache),返回我们最后打包好的镜像

关键字作用
FORM当前镜像是基于哪个官方镜像(第一个指令必须是 From)
MAINTAINER镜像维护者的姓名和邮箱 (废弃)
RUN构建镜像时需要运行的指令
EXPOSE当前容器对外暴露的端口号
WORKDIR指定在创建容器后,终端默认登陆进来的工作目录
ENV用来在构建镜像过程中设置环境变量
ADD将宿主机目录下的文件拷贝到镜像(ADD 会自动处理 URL 和解压tar 包)
COPY将宿主机目录下的文件拷贝到镜像
VOLUME容器数据库卷,用于数据保存和持久化
CMD指定一个容器启动时要运行的命令,Dockerfile中可以有多个 CMD命令,但只有最后一个会生效,CMD 会被docker run 之后的参数替换
ENTRYPOINT指定一个容器启动时要运行的命令,ENTRYPOINT 和 CMD 一样,都是指定容器启动程序及参数

2、运行 Dockerfile 文件

docker build -t conterName .(路径,. 表示当前路径) 

Docker compose

1、docker compose 是Docker 官方的另一个开源项目,用于对多个容器定义和运行的快速编排

比如一个项目依赖于 Redis 、 MqRabbit、Mysql 环境然后才能正常启动,这时候就可以用 docker compose 对容器启动做编排

项目(Project):有多个服务共同组成的一个完整的业务单元,定义 docker-compose.yml中

服务(Service): 一个服务对应一个应用容器,在一个项目中可以存在多个服务

2、下载安装 docker compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

3、编写 docker-compose.yml 文件将要运行的容器进行编排

a. 创建一个 docker-compose.yml 文件(官方建议命名)

b. 编写格式

version: "3.0" #compose 的版本号
?
services:
 ? mysql: ? #服务名唯一
 ?    built:
 ? ? ?  context: /path ? #Dockerfile 文件的路径
 ? ? ? #先将 Dockerfile 文件上传服务器,
 ?   ? #然后在 docker-compose.yml 文件用 build 的指令来将指令路径下的 Dockerfile 文件创建成镜像
 ? ? ? container_name: mysql #相当于docker run 中的 --name
 ? ? ? image: mysql:latest  #创建当前这个服务使用的镜像是谁(指定镜像)
 ? ? ? ports:
 ? ? ? ? - "3306:3306" #最好用引号抱起来
 ? ? ? ? - "889:889"
 ? ? ?  volumes: #宿主机和容器中目录中的数据卷共享
 ? ? ? ?  - /home/super:/user/local ?  #宿主机绝对路径 :容器绝对路径
 ? ? ? ?  #或者可以直接指定卷(宿主机会自动创建)
 ? ? ? ?  - mysqldata:/var/lib/msql
 ? ? ? ?  - mysqlconf:/etc/mysql
 ? ? ?  network: #指定网络,用于容器中的通信
 ? ? ? ?  - hello  #网桥 , 要在下方定义 hello 网桥
 ? ?    environment: #指定运行时要的账号密钥设置
 ? ?      - MYSQL_ROOT_PASSWORD=root
 ? ? 
 ? redis: ? #服务名唯一
 ? image: redis:latest  #创建当前这个服务使用的镜像是谁(指定镜像)
 ? ports:
 ? ? - "6379:6379"
?
networks:
  - hello  #默认是 bridge 查看网桥 docker network ls 
# 上面两行的写法会创建 项目名_hello 的网桥名,
#如果不想要这样的网桥名,要先在服务器创建 hello 网桥, docker network -d create bridge hello
  external: #然后使用指定网桥(用已经用的,不创建),volumes 也是同理
    true
    
volumes: 
 ? #查看 docker 共享的文件 docker volume ls
 ? #查看目录细节  docker inspect hello_mysqldata ,在细节中有目录的据对路径
 ? mysqldata:
 ? mysqlconf:

c. 在 docker-compose.yml 文件的目录下, 运行 docker-compose

docker-compose up -d
参数说明: up 表示不重启正常的容器, 
 ? ? ? ? -d  后台启动

d. build 指令先构建镜像,再使用镜像创建容器

先将 Dockerfile 文件上传服务器,然后在 docker-compose.yml 文件用 build 的指令来将指令路径下的 Dockerfile 文件创建成镜像

不过对于多台服务集群的情况下,可以将镜像服务长传云,然后直接用云上将镜像下载下来运行

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-26 12:32:40  更:2021-10-26 12:33:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:25:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码