1. 基本概念
三大核心要素:镜像(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