docker学习总结

本文详细介绍了Docker的安装、镜像管理、容器启动与交互、守护式容器、容器操作、MySQL/Tomcat/Nginx/Redis部署、docker-compose使用、迁移与备份、Dockerfile创建镜像、私有仓库搭建与镜像上传等内容,是全面学习Docker的实战指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Docker概述

目标:了解Docker是什么、应用场景及其组成部分

小结

  • Docker是一个应用容器引起;
  • 应用场景:web的自动化打包发布,自动化测试、可持续集成,安装各种组件;
  • 与传统虚拟机比较:docker启动速度比较快,占用体积较小;
  • 组成:docker守护进程,仓库,镜像,容器,docker客户端

2. Docker安装与启动

目标:在线安装docker并使用命令启动、停止docker

分析

  1. 更新yum源为ustc;
  2. 安装docker;
  3. 更新docker的镜像源为ustc;
  4. 使用docker命令操作docker

小结

需求更新yum源和镜像源安装docker;安装之后可以使用 docker -v

# 启动
systemctl start docker
# 停止
systemctl stop docker

#查看docker启动状态
systemctl status docker

使用国内 daocloud 一键安装命令(推荐):

curl -sSL https://get.daocloud.io/docker | sh

3. 镜像相关命令

目标:能够使用镜像的查看、搜索、拉取、删除命令

小结

拉取:docker pull 镜像名称:版本号(若不指定则会拉取最新的版本)

删除全部镜像:docker rmi ` docker images -q ` (慎用)

4. 查看&创建并启动交互式容器

目标:使用查看容器命令;拉取centos:7的镜像之后结合容器启动命令和选项 -it 启动交互式容器

分析

  1. 拉取镜像(容器是基于镜像运行);
  2. 创建并启动交互式容器,docker交互式容器(启动容器之后会直接进入容器的命令行终端,如果退出则容器停止运行)

小结

# 查看容器
docker ps -a

# 创建并启动交互式容器
docker run -it --name=mycentos7 centos:7 /bin/bash

启动交互式容器之后是直接进入容器终端;可以查看容器的文件结构;使用exit命令则会退出终端并且停止容器。

5. 创建并启动守护式容器

目标:结合容器启动命令和选项 -di 启动守护式容器

分析

创建并启动docker容器,可以在后台运行;

在创建交互式容器之后如果退出的话,容器处于停止状态,可以使用命令再次启动容器,使用命令进入容器并操作。

# 创建并启动守护式容器
docker run -di --name=mycentos2 centos:7

# 启动容器后再进入容器
docker exec -it mycentos2 /bin/bash

小结

守护式容器在启动之后会一直在后台运行,即使进入容器之后执行exit命令也不会停止容器;

适用于需要长期运行容器的情况

6. 停止&拷贝&挂载&查看ip&删除容器

目标:能够使用容器的停止、拷贝文件、目录挂载、查看IP、删除命令

小结

  • 容器停止、启动
    docker start/stop mycentos2

  • 拷贝文件:容器与宿主机之间的文件互拷
    —宿主机拷贝到容器中
    touch abc.txt
    docker cp abc.txt mycentos2:/
    —容器中拷贝到宿主机
    1、在容器上创建文件
    touch cba.txt
    2、在宿主机执行命令
    docker cp mycentos2:/cba.txt /root

  • 目录挂载:将宿主机的目录映射到容器对于目录
    docker run -id -v /a:/a --name=mycentos3 centos:7

  • 查看容器IP

      docker inspect mycentos3
    
  • 容器删除:只能删除停止状态的容器;
    docker rm `docker ps -a -q`

7. MySQL容器部署

目标:拉取mysql镜像,启动容器,操作容器中的mysql

分析

  1. 拉取mysql镜像;
    docker pull centos/mysql-57-centos7

  2. 创建并启动守护式容器;
    docker run -id --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7

  3. 在容器中操作mysql;
    docker exec -it mysql5.7 /bin/bash
    mysql -u root -p
    密码为空

  4. 使用图形界面工具(windows)操作在docker中安装的mysql;在创建mysql容器的时候使用-p指定端口映射实现连接

    在创建容器的时候mysql的root用户可以指定远程访问的密码。

小结

在创建容器的时候指定环境变量MYSQL_ROOT_PASSWORD表示使用root进行远程连接时候的密码。如果需要进行远程连接的话可以使用-p进行端口映射。

8. Tomcat容器部署

目标:拉取tomcat镜像,启动容器,操作容器中的tomcat

分析

  • 将项目文件上传到容器中的tomcat目录(webapps)

    创建容器的时候可以指定-v进行目录挂载,tomcat在容器中的目录(/usr/local/tomcat/webapps)

  • 可以通过外部浏览器访问容器中的项目

    创建容器的时候可以指定-p进行端口映射

  1. 拉取tomcat镜像;docker pull tomcat

  2. 创建并启动tomcat容器;
    docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat

  3. 访问容器中tomcat

    http://192.168.76.128:9000

小结

上传项目文件可以使用容器的目录挂载功能,外部访问可以使用端口映射

9. Nginx容器部署

目标:拉取nginx镜像,启动容器,访问nginx

分析

nginx的默认访问端口是:80

在创建容器的时候需要进行端口映射,指定-p,映射的端口80

  1. 拉取nginx镜像;
    docker pull nginx
  2. 创建并启动nginx容器;
    docker run -id --name=mynginx -p 80:80 nginx
  3. 在浏览器上访问容器中nginx,http://192.168.76.128

小结

如果被占用了80端口,那么在指定映射的时候可以改变宿主机的端口映射,在访问时也需要带上端口号。

10. Redis容器部署

目标:拉取redis镜像,启动容器,操作容器中的redis

分析

  1. 拉取redis镜像;
  2. 创建并启动redis容器;默认端口是6379,如果需要外部访问则可以使用端口映射;
  3. 连接redis: ①使用命令行客户端 ②使用图形界面工具

小结

# 创建容器
docker run -di --name=myredis -p 6379:6379 redis

# 进入容器
docker exec -it myredis /bin/bash

11. docker-compose简介&安装

目标:docker-compose的作用;能够安装docker-compose
centos7安装docker-compose
curl -L “https://github.com/docker/compose/releases/download/1.24.0/docker-compose- ( u n a m e − s ) − (uname -s)- (unames)(uname -m)” -o /usr/local/bin/docker-compose
docker-compose -version(可能出现错误 文本文件忙,可以杀死该进程在执行)

小结

docker-compose是一个应用工具;可以通过配置docker-compose.yml文件同时启动多个容器。

部署项目时可以编写一个docker-compose.yml文件作为启动项目单位,同时启动项目相关的那些容器。

12. docker-compose应用

目标:编写模版文件同时启动docker容器

分析

docker-compose可以实现一次启动多个容器;通过配置docker-compose模板文件(docker-compose.yml),在这个配置文件中去配置各个容器及其相关的依赖。

mkdir /usr/local/mycompose
cd /usr/local/mycompose
vi docker-compose.yml
  1. 编写模板文件;

version: ‘3’
services:
redis1:
image: redis
ports:
- “6379:6379”
container_name: “redis1”
networks:
- dev
mysql1:
image: centos/mysql-57-centos7
environment:
MYSQL_ROOT_PASSWORD: “root”
ports:
- “3306:3306”
container_name: “mysql1”
networks:
- dev
web1:
image: tomcat
ports:
- “9090:8080”
container_name: “web1”
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
2. 创建并启动docker-compose项目(模板文件所在的目录,docker-compose.yml)
docker-compose up -d

  1. 测试

小结

docker-compose可以配置一个模板文件实现一次可以启动多个容器,运行时候可以执行一个up则会创建并启动模板文件中的各个服务。

模板文件是yml格式的;编写的时候需要注意其格式。

13. 迁移与备份

目标:能够将容器保存为镜像,备份,恢复镜像再启动以恢复的镜像作为基础的容器

分析

在当前的容器中安装了各种组件;期望在其他服务器上也能快速拥有该容器的一切环境;可以将当前的容器制作为一个镜像,再将该奖项复制到其他服务器,其他服务器再基于镜像运行容器。

  1. 将容器保存为一个镜像;
    docker commit mynginx mynginx
  2. 备份镜像;
    docker save -o mynginx.tar mynginx
  3. 恢复镜像;
    docker load -i mynginx.tar
  4. 基于镜像运行容器
    docker run -id --name=mynginx -p 80:80 mynginx

小结

docker容器可以保存为一个镜像;备份为一个镜像包(*.tar)可以复制迁移到其他服务器,再恢复该tar包中的镜像,基于镜像运行容器实现环境的一致。

14. 使用Dockerfile创建镜像

目标:使用Dockerfile创建一个自定义jdk1.8的镜像

分析

假设在centos7作为基础镜像上;添加jdk1.8并构建一个包含jdk1.8的centos7新镜像。

– Dockerfile可以实现;Dockerfile是由一系列命令和参数构成的文本文件,在文件中可以指定各个组件资源和运行命令等。

实现步骤:

  1. 拉取centos7镜像;
    docker pull centos:7
  2. 上传jdk1.8;
    alt+p
  3. 编写Dockerfile文件;
    vi Dockerfile

FROM centos:7
MAINTAINER ZC
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar: J R E H O M E / l i b : JRE_HOME/lib: JREHOME/lib:CLASSPATH
ENV PATH J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH

  1. 构建镜像;
    docker build -t=‘jdk1.8’ .
  2. 测试(基于新镜像创建并运行容器,运行java -version)
    docker run -it --name=mycentosjdk jdk1.8 /bin/bash
    java -version

小结

Dockerfile可以基于镜像制作镜像;docker build -t='jdk1.8' .

15. 私有仓库搭建与配置

目标:拉取、启动私有仓库镜像并可以访问私有仓库
1、拉取
docker pull registry
2、启动
docker run -id --name=registry -p 5000:5000 registry
3、修改配置文件
vi /etc/docker/daemon.json
添加:“insecure-registries”:[“192.168.0.9:5000”]
4、重启测试
systemctl restart docker
docker start registry
访问:http://192.168.0.9:5000/v2/_catalog
小结

拉取registry镜像;基于镜像创建私有仓库容器;需要去修改docker的一个配置文件指定私有仓库地址;再访问私有仓库:http://ip:5000/v2/_catalog

16. 将镜像上传至私有仓库

目标:将制作的jdk1.8的镜像上传到私有仓库
1、标签
docker tag jdk1.8 192.168.0.9:5000/jdk1.8
2、重启
docker restart registry (如果是没有启动则是docker start regisrty)
3、上传
docker push 192.168.0.9:5000/jdk1.8
4、测试
访问:http://192.168.0.9:5000/v2/_catalog
小结

将本地镜像打标签(标记本地镜像为一个私有仓库中的镜像);将打了标签的镜像推送到私有仓库。

17. 从私有仓库拉取镜像

目标:将私有仓库中的jdk1.8镜像拉取到本地
1、私有仓库就是本机,本机拉取
docker pull 192.168.0.9:5000/jdk1.8
2、私有仓库不是本机
vi /usr/lib/systemd/system/docker.service
#在配置文件中加入如下内容
–add-registry=192.168.0.12:5000 --insecure-registry=192.168.0.12:5000
#重启
systemctl daemon-reload
systemctl restart docker

小结

  • 私有仓库与拉取镜像的服务器是在同一台机器上:直接拉取镜像; docker pull 私有仓库地址/镜像名称
  • 私有仓库与拉取镜像的服务器是不在同一台机器上:需要去修改docker的配置文件,指定私有仓库地址;再执行拉取镜像的命令。

如果本地存在同名的镜像需要先删除镜像后拉取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值