Docker
hub.docker.com //镜像地址
Docker 安装
启动验证
阿里云 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> 镜像名:<tags> - 删除镜像
宿主机与 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 中的指令按步自动生成镜像
命令
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 通讯优化这个问题
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 "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
部署
编写 yml 构建脚本
编译 yml 文件docker-compose up -d
实战
构建 Dockerfile
构建 web 容器
创建镜像docker build -t pengasan.com/ucas-web .
运行docker run pengasan.com/ucas-web
创建数据库容器
创建镜像docker build -t pengasan.com/ucas-db .
运行docker run -d -e MYSQL_ROOT_PASSWORD=root pengasan.com/ucas-db
DockerCompose 一键发布
命令格式:docker-compose.yml
评论