【Docker】

官方文档 https://docs.docker.com/
镜像中心

系统架构

在这里插入图片描述

容器中应用程序的运行原理

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

容器与虚拟机的区别

虚拟机存在独立的硬件系统与操作系统,容器是共享宿主机中的硬件系统与操作系统

镜像和容器

当我们利用Docker安装应用时,Docker会自动搜索并下载应用镜像 (image)。镜像不仅包含应用本身,还包含应用运行所需要的环境、配置、系统函数库。Docker会在运行镜像时创建一个隔离环境,称为容器(container)

Docker安装

  1. Linux中已安装Centos系统,安装Docker文档地址:https://docs.docker.com/engine/install/centos/
  2. 卸载旧版Docker
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine
  1. 配置Docker的yum库

    • 首先安装yum工具:yum install -y yum-utils
    • 配置Docker的yum源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  2. 安装Docker:yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

  3. 启动和校验

# 启动Docker
systemctl start docker

# 停止Docker
systemctl stop docker

# 重启
systemctl restart docker

# 设置开机自启
systemctl enable docker

# 执行docker ps命令,如果不报错,说明安装启动成功
docker ps
  1. 配置镜像加速(阿里云、腾讯云、华为云)
    以阿里云为例,地址为:https://www.aliyun.com/
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
# 创建目录
mkdir -p /etc/docker

# 复制内容,注意把其中的镜像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://xxxx.mirror.aliyuncs.com"]
}
EOF

# 重新加载配置
systemctl daemon-reload

# 重启Docker
systemctl restart docker

Docker安装镜像

Docker维护公共镜像仓库 Docker Hub,实际镜像由各软件各自维护,国内也有阿里云、腾讯云等镜像仓库。

比如部署Mysql,步骤如下:

  • 安装
docker run -d \
--name mysgl \
-p 3306:3306 \
-e TZ=As ia/Shanghai \
-e MYSQL ROOT_PASSWORD=123 \
mysql

在这里插入图片描述

  • 测试数据库是否能连接
    在这里插入图片描述

在这里插入图片描述

  • 查看mysql docker inspect mysql

在这里插入图片描述
容器mysql3306端口不变,取决于进程,宿主机端口可以不同,再映射到同一容器端口
在这里插入图片描述
镜像名称不加版本号默认为最新版本,比如:nginx = nginx:latest

Docker流程

在这里插入图片描述

Docker常见命令

在这里插入图片描述

比如部署nginx,步骤如下:

镜像相关命令(此处以nginx为例)

  • dockerhub搜索镜像
  • 拉取镜像: docker pull 名称
  • 查看本地镜像:docker images
  • [附属] 本地打包命令帮助:docker save --help
  • [附属] 打包本地镜像:docker save -o 名称.tar 镜像名称:版本号 eg:docker save -o nginx.tar nginx:latest
  • [附属] 删除镜像:docker rmi 镜像名称:版本号 eg:docker rmi nginx:latest
  • [附属] 此时查看镜像:docker images
  • [附属] 重新加载以打包镜像命令帮助:docker load --help
  • [附属] 重新加载已打包镜像:docker load -i 打包的文件名称 eg:docker load -i nginx.tar

容器相关命令(此处以nginx为例)

  • 创建并运行容器docker run [-d] --name 镜像名称 -p 端口号:映射的端口号 [-e 环境变量] [-v 数据卷名:容器内目录] 镜像名称 eg:docker run -d --name nginx -p 80:80 nginx

  • 查看运行中的容器状态:docker ps

  • 查看运行中容器状态按照既定格式:docker ps --format "table [.ID)Jtf .ImagelJtl.Ports t/l.Status J tll.Names ]" 1

  • 查看所有容器状态:docker ps -a

  • 查看所有容器状态按照既定格式:docker ps --format "table [.ID)Jtf .ImagelJtl.Ports t/l.Status J tll.Names ]" -a 1

  • 停止容器:docker stop 名称

  • 启动容器:docker start 名称

  • 删除容器:docker rm 名称

  • 强制删除容器:docker rm 名称 -f

  • 查看日志:docker logs 容器名 eg:docker logs nginx

  • 持续跟踪日志:docker logs -f nginx

  • 进入容器并做交互:docker exec -it 容器名 bash

    eg:docker exec -it nginx bash ,进入容器后ls -l查看文件,可以看到一个容器内部完整独立的文件系统
    eg:docker exec it mysql bash ,然后访问mysql mysql -uroot -p ,然后输入mysql密码即可访问

  • 退出容器交互:exit

Docker数据卷

因为docker中不能用vi等命令,所以此时需要数据卷,数据卷是一个虚拟目录,是容器目录与宿主机目录之间映射的桥梁
在这里插入图片描述
在这里插入图片描述

nginx容器与数据卷挂载

数据卷挂载流程(以nginx为例)

  • 数据卷帮助命令:docker volume --help
    在这里插入图片描述
  • 先删除原有容器:docker rm -f 容器名称 eg:docker rm -f nginx
  • 创建容器并实现数据卷挂载:docker run -d --name 容器名称 -p 宿主机端口号:映射容器的端口号 -v 数据卷名称:容器内挂载目录(镜像文档中有容器位置目录) eg:docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx
  • 查看已挂载的数据卷:docker volume ls
  • 查看具体数据卷挂载详情:docker volume respect 数据卷名称 eg:docker volume respect html
  • 去详情中的宿主机挂载位置查看是否存在挂载名称的数据卷:cd 文件目录
  • 然后查看宿主机文件,并进行编辑宿主机的文件,进而容器内文件同时改变:cat 文件名 vi 文件名或者用编辑器
  • 最后访问浏览器输入宿主机ip,查看是否更改成功
    在这里插入图片描述
    在这里插入图片描述

其他容器与数据卷挂载 – 基于本地目录与数据卷的挂载

数据卷挂载流程(以mysql为例),因为mysql容器内运行过程中会不断产生数据,存放在容器内文件系统会越来越多,体积越来越大,以后迁移困难,因此出于数据解耦考虑,需要把数据挂载出去,如果用默认的匿名数据卷的话容器升级数据会丢失,所以最好自己去做数据挂载

  • 查看容器是否有挂载,默认会有匿名挂载:docker respect 容器名称 eg:docker respect nginx

在这里插入图片描述

  • 首先进入根目录,查看目录:cd ~ pwd
  • 创建本地目录:mkdir /
  • 寻找镜像文档中配置文件、初始化脚本、放数据文件的位置,并与本地文件做挂载
docker run-d 
--name mysql
-p 3306:3306
-e TZ=Asia/Shanghai
-e MYSQL_ROOT_PASSWORD=123
-v /root/mysql/data:/var/lib/mysql
-v /root/mysql/init:/docker-entrypoint-initdb.d  
-v /root/mysql/conf:/etc/mysql/conf.d
mysql
  • 查看是否挂载成功 docker volume ls

  1. 以上关于固定格式,可以自定义设置命令别名,步骤如下:
    vi ~/.bashrc,进行设置后,使其生效 source ~/.bashrc
    在这里插入图片描述 ↩︎ ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值