Docker
初识 Docker
快速构建、运行、管理应用的工具。
Docker 卸载
1 2 3 4 5 6 7 8 9
| yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine \ docker-selinux
|
Docker 安装
1、安装yum工具
1
| sudo yum install -y yum-utils device-mapper-persistent-data lvm2
|
2、配置Docker的yum源
1 2 3
| sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
|
3、更新yum,建立缓存
4、安装Docker
1
| yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
|
5、启动与校验
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
docker ps
|
Docker 基本概念
应用镜像image:包含应用本身及运行时需要的环境、配置、系统函数库等的快照。
容器Container:Docker通过image创建应用实例时所创建的隔离环境。
镜像名称: repository:tag, tag为镜像版本。
Docker 常见命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| docker pull
docker push
docker images
docker rmi
docker build
docker save
docker load
docker run
docker logs
docker exec
docker ps
docker rm
docker stop
docker start
docker volume create
docker volume ls
docker volume rm
docker volume inspect
docker volume prune
|
Docker 数据卷
数据卷(volume),是容器内目录与宿主机目录之间映射的桥梁。
有些容器在创建时会自动创建匿名数据卷,也可在创建时手动指定要挂载的目录。注意,在容器创建后,数据卷挂载就不可再修改。
Docker 容器创建
1 2 3 4 5 6 7 8 9 10
| docker run -d \ --name 容器名 \ -p 宿主机端口:容器端口 \ -v 宿主机目录:容器内目录 \ -e key=value \ -network 网络名 \ 镜像名称
|
注意,本地目录必须以 / 或 ./ 开头,否则会被识别为数据卷。
自定义镜像 Dockerfile
镜像结构
入口,EntryPoint:镜像运行入口,一般为程序启动脚本和参数。
层,Layer:添加安装包、依赖、配置等,每次操作为一层。
基础镜像,BaseImage:应用依赖的系统函数库、配置、环境等。
镜像描述文件 Dockerfile
|
说明 |
示例 |
| FROM |
指定基础镜像 |
FROM centos:7 |
| ENV |
指定环境变量 |
ENV key=value |
| COPY |
拷贝本地文件,到镜像指定位置 |
COPY ./jdk17.tar.gz /tmp |
| RUN |
执行Linux命令 |
RUN tar -zxvf /tmp/jdk17.tar.gz |
| EXPOSE |
指定运行时需暴露的端口 |
EXPOSE 8080 |
| ENTRYPOINT |
镜像中应用的启动命令 |
ENTRYPOINT java -jar xx.jar |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 指定centos7为基础镜像 FROM centos:7 # 安装jdk到镜像 COPY jdk17.tar.gz /usr/local/ RUN tar -xzf /usr/local/jdk17.tar.gz -C /usr/local/ && rm /usr/local/jdk17.tar.gz # 配置环境变量 ENV JAVA_HOME=/usr/local/jdk-17.0.10 ENV PATH=$JAVA_HOME/bin:$PATH # 创建应用目录 RUN mkdir -p /app WORKDIR /app # 部署应用到容器 COPY app.jar app.jar # 暴露端口 EXPOSE 8080 # 启动脚本 ENTRYPOINT ["java", "-jar", "/app/app.jar"]
|
构建自定义镜像
1、编写Dockerfile文件
2、执行构建命令
1 2 3
| # -t repository:tag 给镜像起名 # . 为指定dockerfile所在目录, .指代当前目录 docker build -t myimage:1.0 .
|
Docker 网络
Docker中所有容器,都是以bridge的方式连接到Docker中的一个虚拟网桥上。
通过让不同容器连接至同一自定义网络,可以让容器间通过容器名互相访问,以此代替ip通信。解决了ip地址经常变动及不确定的问题。
网络相关命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 创建一个网络 docker network create # 查看所有网络 docker network ls # 移除一个网络 docker network rm # 清除未使用的网络 docker network prune # 使指定容器连上指定网络 docker network connect # 使指定容器断开指定网络 docker network disconnect # 查看网络详细信息 docker network inspect
|
DockerCompose
通过 docker-compose.yml 模板文件,来定义一组相互关联的容器。可以实现多个互相关联的Docker容器的快速部署。
yml文件
docker-compose.yml示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| services: mysql: image: mysql:8 container_name: mysql ports: - "3307:3306" environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: 123 volumes: - "宿主机目录:容器目录" networks: - tlias-net tlias: build: context: . dockerfile: Dockerfile container_name: tlias-server ports: - "8080:8080" networks: - tlias-net depends_on: - mysql
networks: tlias-net: name: itheima
|
相关命令
1 2 3 4 5 6 7 8 9 10 11 12 13
| docker compose [OPTIONS] [COMMAND] # Options -f 指定compose文件路径和名称,默认为当前目录下寻找 -p 指定project名称,默认为当前目录名称 # Commands up 创建并启动所有Service容器 down 停止并移除所有Service容器、网络 ps 列出所有启动的容器 logs 查看指定容器日志 stop 挂起容器 start 启动容器 restart 重启容器 top 查看运行进程
|