Docker
hub.docker.com //镜像地址
Docker安装
1 | arduino复制代码//安装yum工具包 yum-utils 数据存储驱动device-mapper-persistent-data 和lvm2 |
启动验证
1 | arduino复制代码//启动命令 |
阿里云Docker镜像加速
通过阿里云的加速服务来加速访问国外仓库的操作
需要去阿里云开通服务
1 | bash复制代码sudo mkdir -p /etc/docker |
Docker常用命令
- docker pull 镜像名<:tags> - 从远程仓库抽取镜像 eg.docker pull tomcat:9.0-jdk8-adoptopenjdk-openj9
- docker images - 查看本地镜像
- docker run 镜像名<:tags> - 创建容器,启动应用
- docker ps - 查看正在运行中的镜像
- docker stop 容器id 停止容器
- docker rm <-f(强制)> 容器id - 删除容器
- docker rmi <-f> 镜像名: - 删除镜像
宿主机与Docker容器通讯
client不能直接访问docker,需要访问宿主机然后映射到docker服务
配置映射关系并启动docker容器
- docker run -p 8000:8080 tomcat
- docker run -p 8000:8080 -d tomcat 后台运行
在容器中执行命令
- 格式:docker exec [-it] 容器id 命令
- exec 在对应容器中执行命令
- -it 采用交互方式执行命令
- 实例:docker exec -it 0738ed2fe68b /bin/bash
容器生命周期
Dockerfile构建镜像
介绍
Dockerfile是一个包含用于组合镜像的命令的文本文档
Docker通过读取Dockerfile中的指令按步自动生成镜像
命令
1 | ruby复制代码FROM tomcat:latest //设置基础景象 |
- docker build -t 机构/镜像名<:tags> Dockerfile目录 //构建自定义镜像
- eg. docker build -t pengasan.com/mywebapp:1.0
Dockerfile基础命令
- FROM centos #制作基准镜像(基于centos:lastest)
- LABEL & MAINTAINER - 说明信息
- MAINTAINER pengasan.com
- LABEL version = “1.0” ,LABEL description = “商城的项目”
- WORKDIR - 设置工作目录
- WORKDIR /usr/local ,WORKDIR /usr/local/newdir #自动创建
- ADD & COPY - 复制文件
- ADD hello / #复制到根路径
- ADD test.tar.gz / #添加根目录并解压
- ADD 除了复制,还具备添加远程文件功能
- ENV - 设置环境常量
- ENV JAVA_HOME /usr/local/openjdk8
- RUN ${JAVA_HOME}/bin/java -jar test.jar
- EXPOSE - 暴露容器端口 仅仅是声明
- EXPOSE 8080
- docker run -p 8000:8080 tomcat
Dockerfile运行命令
- RUN : 在Build构建时执行命令
- ENTRYPOINT : 容器启动时执行的命令
- CMD : 容器启动后执行默认的命令或参数
RUN构建时运行
- RUN yum install -y vim #Shell 命令格式
- RUN [“yum”,”install”,”-y”,”vim”] #Exec命令格式 官方推荐用这个方式
ENTRYPOINT启动命令
- ENTRYPOINT(入口点)用于在容器启动时执行命令
- Dockerfile中只有最后一个ENTRYPOINT会被执行
- ENTRYPOINT [“ps”] #推荐使用Exec格式
CMD默认命令
- CMD用于设置默认执行的命令 (默认命令 如果启动命令中有附加命令会被覆盖)
- 如Dockerfile中出现多个CMD,则只有最后一个被执行
- 如容器启动时附加指令,则CMD被忽略
- CMD [“ps” , “-ef”] #推荐使用Exec格式
容器间Link单向通信
容器每次创建会都会被赋予一个ip,这个ip是动态的,当然我们容器间使用ip是天然可用通讯的但是一旦重新启动ip就会改变,这样是我们的日常工作难度大大增加,所以我们使用link通讯优化这个问题
1 | bash复制代码docker run -d --name web tomcat |
Bridge网桥双向通信
介绍
实现原理
命令
- docker network ls //查看网络服务
- docker network create -d bridge my-bridge //创建一个自定义网桥
- docker network connect my-bridge[网桥名称] web[容器名称] //容器绑定网桥
所有绑定一个网桥的容器之间都是能互相通讯的。
Volume容器间共享数据
背景
如果一个容器中的数据发生了改变,我们不需要挨个容器去手动更新数据,直接利用volume源数据让其他容器进行读取数据
挂载宿主机命令
第一种方式 (-v的方式)
- 格式:docker run –name 容器名 -v 宿主机路径:容器内挂载路径 镜像名
- 实例:docker run –name tomcat1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
第二种方式 (通过共享容器内挂载点)
- 创建共享容器:docker create –name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
- 共享容器挂载点:docker run –volumes-from webpage –name t1 -d tomcat
Docker Compose
容器编排工具
单机多容器部署工具,集群的话需要其他工具 例如k8s
通过yml文件定义多容器部署
安装
- sudo curl -L “github.com/docker/comp… -s)-$(uname -m)” -o /usr/local/bin/docker-compose
- sudo chmod +x /usr/local/bin/docker-compose
部署
编写yml构建脚本
1 | yaml复制代码version: '3.3' |
编译yml文件docker-compose up -d
实战
构建Dockerfile
构建web容器
1 | sql复制代码FROM openjdk:8u222-jre |
创建镜像docker build -t pengasan.com/ucas-web .
运行docker run pengasan.com/ucas-web
创建数据库容器
1 | sql复制代码FROM mysql:5.7 |
创建镜像docker build -t pengasan.com/ucas-db .
运行docker run -d -e MYSQL_ROOT_PASSWORD=root pengasan.com/ucas-db
DockerCompose 一键发布
命令格式:docker-compose.yml
1 | yaml复制代码version: '3.3' |
本文转载自: 掘金