1. 基本概念

Docker基础_docker

三大核心要素:镜像(image)、容器(container)、仓库(registry)

  • Docker_Host:
  • 安装Docker的主机
  • Docker Daemon:
  • 运行在Docker主机上的Docker后台进程
  • Client:
  • 操作Docker主机的客户端,执行docker命令(pull、push、run)
  • Registry:
  • 镜像仓库(软件市场),官方镜像仓库dockers HUB,私有仓库harbor
  • Images:
  • 镜像,可以直接启动运行软件程序
  • Containers:
  • 容器,由镜像启动起来正在运行中的程序

2. centos 安装docker(yum 安装)

​官方指导文档​

2.1 卸载旧版docker

​`​​ 

# yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine


2.2 yum源

yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

2.3 安装和启动

#安装最新版
yum install -y docker-ce docker-ce-cli containerd.io

#安装指定版本
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
systemctl enable docker && systemctl start docker

#查看docker 信息
docker info

3. 配置国内镜像加速

    在/etc/docker路径下,新建一个文件daemon.json,可参考​​https://cr.console.aliyun.com/cn-beijing/instances/mirrors​

阿里云加速工具
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://rxazgoo0.mirror.aliyuncs.com"]
}
EOF
#是配置生效
systemctl daemon-reload && systemctl restart docker

4. docker 命令

4.1 镜像管理

从​​docker hub​​找到目标镜像,利用docker pull 仓库名镜像名:版本号,拉取官方镜像可省略仓库名,拉取最新版本镜像可省略版本号

  • docker pull :拉取镜像(下载)
  • docker push:上传镜像
  • docker image ls /docker images:查看已有镜像列表
  • docker rmi:删除镜像
docker pull nginx  #下载最新版
#镜像名:版本名(标签)

docker pull nginx:1.20.1

#下载来的镜像都在本地
docker images #查看所有镜像

nginx = nginx:latest

docker rmi 镜像名:版本号/镜像id
#推荐使用镜像id号

# 把旧镜像的名字,改成仓库要求的新版名字
docker tag local-image:tagname new-repo:tagname #命名
# 登录到docker hub
docker login

docker push new-repo:tagname #上传
#退出docker hub
docker logout

4.2 容器管理

4.2.1 启停容器

运行镜像,docker会创建一个容器。

  • docker run [OPTIONS] IMAGE [COMMAND] [ARG...],参考docker run --help 查看
  • -d:后台运行
  •  --restart=always: 开机自启
  • --name:容器名
  • -p:端口映射,主机端口:容器端口
  • -i:交互控制台
  • -t:tty设备
  • -e:给容器挂载存储卷,挂载到容器的某个目录
  • -v:给容器挂载存储卷,挂载到容器的某个目录
  • -m:指定容器的内存上限
  • docker ps:查看运行中的镜像
  • docker ps -a:查看所有
  • docker rm  容器id/名字:删除
  • docker stop 容器id/名字:停止
  • docker start 容器id/名字:启动
  • docker update 容器id/名字 --restart=always:开机启动容器
# 开机后台运行nginx镜像,容器命名为mynginx,通过主机的8080端口访问容器的80端口
docker run --name=mynginx -d --restart=always -p 8080:80 nginx
4.2.2 修改容器
# 进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash

# 重启容器
docker restart 容器id

#把容器指定位置的东西复制出来
docker cp 容器id:文件位置 本地文件位置
#把外面的内容复制到容器里面
docker cp 本地文件位置 容器id:文件位置

#更新镜像,提交改变
dcoker commit
4.2.3 应用挂载外部文件

以MySQL5.7为例

# 1、拉取镜像
docker pull mysql:5.7

# 2、创建实例并启动
docker run -p 3306:3306 --name mysql \
-v /root/mysql/log:/var/log/mysql \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7

# 3、mysql配置 /root/mysql/conf/my.conf
[client]
#mysqlde utf8字符集默认为3位的,不支持emoji表情及部分不常见的汉字,故推荐使用utf8mb4
default-character-set=utf8

[mysql]
default-character-set=utf8

[mysqld]
#设置client连接mysql时的字符集,防止乱码
init_connect='SET collation_connection = utf8_general_ci'
init_connect='SET NAMES utf8'

#数据库默认字符集
character-set-server=utf8

#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server=utf8_general_ci

# 跳过mysql程序起动时的字符参数设置 ,使用服务器端字符集设置
skip-character-set-client-handshake

# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。
# 但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,
# 否则MySQL将无法正常处理连接请求!
skip-name-resolve

# 4、重启mysql容器
docker restart mysql

# 5、进入到mysql容器
docker exec -it mysql /bin/bash

# 6、查看修改的配置文件
cat /etc/mysql/my.conf
4.2.4 更新镜像
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
# 可选参数
--author , -a Author作者
--change , -c Apply Dockerfile instruction to the created image
--message , -m Commit message
--pause , -p true Pause container during commit

#例如
docker commit -a "fenghaiyang" -m "更新了MySQL的配置文件" 73id9df45874 newmysql:5.7
# 73id9df45874为mysql容器

4.2.5 镜像复用

# 将镜像保存成压缩包
docker save -o mysql5.7.tar newmysql:5.7
# 别的机器加载这个镜像
docker load -i mysql5.7.tar

推送镜像仓库下载
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
下载
docker pull new-repo:tagname