Docker

Docker简介

Docker是一种开源的容器化技术,它允许开发者将应用程序及其依赖项打包到一个轻量级、可移植的容器中。这些容器可以在任何支持Docker的系统上运行,确保了应用程序的一致性和可移植性。
在这里插入图片描述

Docker的核心概念包括:

  1. 镜像(Image):镜像是一个轻量级、只读的模板,用于创建一个运行中的容器。它包含了运行应用所需的代码、库、环境变量和配置文件。

  2. 容器(Container):容器是镜像的运行实例。它在隔离的环境中执行应用,保持应用之间的独立性。容器可以被启动、停止、移动和删除。

  3. 仓库(Registry):Docker注册中心是存储Docker镜像的地方。Docker Hub是最著名的公共仓库,但用户也可以设置私有仓库。

Docker提供了诸如容器编排(例如使用Docker Compose)、服务扩展和负载均衡等高级功能。它的主要优势包括:

  • 一致性:确保在不同环境中应用的一致运行。
  • 便携性:容器可以在任何Docker环境中运行。
  • 隔离性:容器之间互相隔离,提高了安全性。
  • 轻量级:容器使用较少的资源,启动快。

Docker安装

Docker 支持在 Windows、CentOS、Ubantu、MacOS 等操作系统上使用

Centos中的安装

  1. yum源更新
yum update
  1. 卸载旧版本,旧版本的Docker被称为docker或docker-engine。如果已安装,则需要先将其卸载。可以使用以下命令:
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  1. 安装必要的依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
  1. 设置docker的yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装docker
yum install -y docker-ce
  1. 查看docker版本
docker -v

设置 Docker 镜像加速器

这里参考阿里云提供的镜像加速器容器镜像服务 (aliyun.com)
在这里插入图片描述
自己编译脚本或者直接在命令行输入

Docker的C/S架构

在这里插入图片描述

Docker的常用命令

常用服务命令

命令说明
systemctl status docker查看状态
systemctl start docker启动服务
systemctl stop docker停止服务
systemctl restart docker重启服务
systemctl enable docker开启启动

常用镜像命令

命令说明
docker images查看镜像
docker search xxx搜索镜像
docker pull xxx[:version]拉取镜像
docker rmi <IMAGE ID>删除镜像 (删除所有可借助命令 docker images -q)

常用容器命令

  • 查看容器
    • docker ps 查看正在运行的容器
    • docker ps -a查看历史容器
  • 创建容器
    • docker run <参数>
      • -i保持容器运行,通常与 -t 连用,加入 it 两个参数后,容器创建后会自动进入到容器中,退出后,容器自动关闭
      • -t为容器重新分配一个新的输入终端,相当于一个 shell, 通常与 -i 联合使用
      • -d以守护模式(后台)运行容器,创建一个容器并在后台保持运行。需要使用 docker exec 进入容器,退出后不会关闭
      • -it交互式容器
      • -id守护式容器
      • --name为创建的容器命名
  1. 拉取镜像
docker pull centos:7
  1. 创建一个交互式容器并且进入容器,因为是采用-t,所以/bin/bash
docker run -it --name=myC01 centos:7 /bin/bash

在这里插入图片描述

  1. exit 退出容器,并通过docker ps -a查看容器

在这里插入图片描述

  1. 创建一个守护式容器在后台运行
docker run -id --name=myC02 centos:7

在这里插入图片描述

  1. 通过docker exec -it <容器名> /bin/bash进入后台运行的程序

在这里插入图片描述

  1. 通过exit离开后,docker ps会发现容器myC02还在运行,这是因为使用-id参数创建的容器,在使用exit退出后,不会被关闭退出,需要通过docker stop <容器>进行停止

  2. 启动容器

docker start <容器>  # exit后仍然会保持运行
  1. 删除容器
docker rm <容器> 
  1. 删除所有容器
docker rm `docker ps -a`
  1. 查看容器的详细信息
docker inspect <容器>

Docker容器数据卷

Docker容器数据卷(Docker Volumes)是一种机制,用于在Docker容器之间持久化和共享数据。

需要注意的是:

  • 数据卷是宿主机中的目录或者文件
  • 当容器目录和数据卷目录绑定后,只要修改就会立即同步
  • 一个数据卷可以被多个容器挂载
  • 一个容器也可以被挂在多个数据卷

在使用Docker Compose时,还可以在docker-compose.yml文件中定义数据卷。

配置数据卷

  • docker run命令中创建卷:在运行容器时,可以使用 -v--mount 标志来创建数据卷。
  • docker卷管理:也可以使用docker volume create创建新卷,这种方式是显式创建一个数据卷。这种方法允许您在运行容器之前先创建数据卷,然后在运行容器时通过-v将其挂载。使用docker volume ls查看所有卷,以及使用docker volume rm删除卷。
docker volume create myvolume
docker run -v myvolume:/path/in/container my_image
# docker run ... -v 宿主机目录/文件:容器内目录/文件 # 最好使用绝对路径
docker run -it --name=myC03 -v /root/myData:/root/myDataContainer centos:7

目录如果不存在则会被自动创建,设置数据卷之后,宿主机和容器中两端数据同步
容器关闭或者删除之后,数据卷目录不会被删除

  • 挂载多个数据卷
docker run -it --name=myC04 \  # 这里\表示回车,换行不执行
-v /root/myDataA:/root/myDataA \
-v /root/myDataB:/root/myDataB \
-v /root/myDataC:/root/myDataC \
centos:7
  • 多个容器挂载在同一个数据卷
docker run -it --name=myC05 -v /root/myData:/root/myDataA centos:7
docker run -it --name=myC06 -v /root/myData:/root/myDataB centos:7
docker run -it --name=myC07 -v /root/myData:/root/myDataC centos:7

数据卷容器

在Docker中,"数据卷容器"是一种使用数据卷共享数据的模式。数据卷容器是一个普通的容器,但它被专门用来提供一个或多个数据卷给其他容器使用,相当于与是个向导。这种方法可以有效地在多个容器之间共享数据,同时保持数据的持久性和独立性。

数据卷容器的优势

  • 数据共享和持久化
  • 数据的独立管理
  • 容器间的解耦

注意

  • 数据卷容器的生命周期:即使数据卷容器被删除,挂载到这个容器的数据卷中的数据仍然会保持不变。
  • 备份和迁移:可以通过备份数据卷容器来备份数据卷,或者使用数据卷的迁移和复制功能。

如何使用数据卷容器

  1. 创建数据卷容器
  • 首先,创建一个容器,并在其中定义一个或多个数据卷。例如:
docker run -it --name=ct -v /root/myData:/root/myData centos:7
  1. 使用数据卷容器的数据卷
  • 其他容器可以通过--volumes-from标志来挂载这个数据卷容器中的数据卷。
docker run -it --name=c01 --volumes-from ct centos:7
docker run -it --name=c02 --volumes-from ct centos:7

Docker应用部署

MySQL

  1. 拉取镜像docker pull mysql:5.7
  2. 创建mysql目录
mkdir /root/mysql
  1. 宿主机mysql配置文件my.conf,可读可写
[client]
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character_set_server=utf8

general_log=ON
general_log_file=/var/log/mysql/mysql.log
  1. 配置端口映射并运行mysql容器
# mysql默认端口是3306,这样将把容器的3306端口映射到宿主机的6033端口
docker run -id -p 6033:3306 \ 
--name=cMySQL \
-v /root/mysql/conf:/etc/mysql \
-v /root/mysql/logs:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=toor \
mysql:5.7
  1. 进入容器
docker exec -it cMySQL /bin/bash
  1. 测试
mysql -uroot -p

通过centos宿主机访问
在这里插入图片描述
还可以通过Navicat进行本机访问,数据存在于/root/mysql/data

Redis

  1. 拉取镜像docker pull redis
  2. 配置端口映射并运行redis容器
docker run -id --name=cRedis -p 6379:6379 redis
#正常Another Redis Desktop Manager通过主机地址ip连接 

Tomcat

  1. 拉取镜像docker pull tomcat:9
  2. 创建tomcat目录
mkdir /root/tomcat
  1. 配置端口映射并运行tomcat容器
docker run -id --name=cTomcat \
-p 8080:8080 \
-v /root/tomcat:/usr/local/tomcat/webapps \
tomcat:9
  1. 进入容器
docker exec -it cTomcat /bin/bash
  1. 测试
#在/root/tomcat中 
mkdir test
vim index.html
# 写入
<h1>this is a test html</h1>

Dockerfile

将容器转换为镜像

命令说明
docker commit <container id> <保存后的image:tag>将容器保存为镜像
docker save -o <压缩文件名> <image:tag>将镜像保存为压缩文件
docker load -i <压缩文件名>将压缩文件还原成镜像文件
注意:使用 docker commit 保存的镜像,只能在保存镜像内部发生的变化,这里不包括之前通过镜像创建容器过程中挂在的数据卷

在这里插入图片描述
将容器保存后的镜像删除后,将压缩文件还原成镜像文件
在这里插入图片描述

使用dockerfile

当使用 Docker 构建和运行容器时,可以使用 Dockerfile 来定义容器的构建步骤。Dockerfile 是一个文本文件,其中包含一系列指令,这些指令告诉 Docker 如何构建容器镜像。

Dockerfile示例1:

# 使用基础镜像
FROM ubuntu:latest

# 设置工作目录
WORKDIR /app

# 复制当前目录下的所有文件到工作目录
COPY . .

# 安装依赖
RUN apt-get update && apt-get install -y \
    python3 \
    python3-pip

# 安装 Python 应用程序的依赖
RUN pip3 install -r requirements.txt

# 暴露容器的端口
EXPOSE 80

# 定义容器启动时运行的命令
CMD ["python3", "app.py"]

Dockerfile示例2:

# 自定义 CentOS7 镜像
FROM centos:7

WORKDIR /root

RUN yum install -y vim
RUN yum install -y net-tools

CMD /bin/bash

使用 Dockerfile 构建镜像 docker build -f dockerfile文件名 -t 镜像名:版本号 .
使用镜像创建容器并进入测试 docker run -it --name=容器名 镜像名:版本号

Dockerfile示例3:

部署一个 springboot 项目到 docker

FROM java:8

ADD springboot项目的jar包文件名(原名) 新名字.jar

CMD java -jar 新名字.jar

Docker Compose

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过 Docker Compose,可以使用一个单独的文件(docker-compose.yml)来配置应用程序的服务、网络、卷等方面的设置。

Docker Compose 的安装与卸载

  • 安装
# 下载到本地
curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 添加访问权限
chmod a+x /usr/local/bin/docker-compose

# 查看版本号
docker-compose -version
  • 卸载
# 删除下载目录即可
rm /usr/local/bin/docker-compose -rf

操作步骤

  1. 使用 Dockerfile 定义运行环境镜像
  2. 使用 docker-compose.yml
  3. 运行 docker-compose up 启动应用

示例:搭建基于 Nginx 反向代理访问的 SpringBoot 项目

  1. 创建一个用于测试的 docker-compose 工作目录.
mkdir /root/docker-compose/nginx/conf.d -p
cd /root/docker-compose
  1. 编写 docker-compose.yml 配置文件
version: '3.5'
services:
	nginx:
		image: nginx
		ports:
			- 80:80
        links:
        	- springbootapp
        volumes:
        	- ./nginx/conf.d:/etc/nginx/conf.d
	springbootapp:
		image: springbootapp
        expose:
            - "9527"
  1. 编写 /root/docker-compose/nginx/conf.d/nginx.conf 配置文件
server {
	listen 80;
	access_log off;
	
	location / {
		proxy_pass http://springbootapp:9527;
	}
}
  1. 通过 docker-compose up 命令启动应用

  2. 通过浏览器访问 http://192.168.184.128/hello

Docker 私有仓库

创建私有仓库

#!/bin/bash
# 创建 docker 私有仓库
# 拉去私有仓库功能镜像
docker pull registry
# 启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 添加私有仓库信任配置到json配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
	"registry-mirrors":["https://6jjvgl09.mirror.aliyuncs.com"],
	"insecure-registries":["192.168.184.128:5000"]
}
EOF
# 重新加载 daemon.json 配置文件
systemctl daemon-reload
# 重启 docker 服务
systemctl restart docker
# 启动容器
docker start registry

上传镜像到私有仓库

# 标记镜像为私有仓库镜像
docker tag centos:7 192.168.184.128:5000/centos:7

# 上传标记的镜像
docker push 192.168.184.128:5000/centos:7

通过 192.168.184.128:5000/v2/_catalog 访问

从私有仓库拉镜像

docker pull 192.168.184.128:5000/centos:7
  • 19
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值