Docker是一个基于go语言开源的应用容器引擎,它允许开发者将应用及其依赖打包到一个可移植的容器中,然后发布到任何支持Docker的Linux或Windows操作系统上。Docker基于内核的轻量级虚拟化技术,使用沙箱机制,容器之间相互隔离。通过容器来打包应用、解耦应用和运行平台Docker 可以快速创建和删除容器,实现快速迭代,节约开发、测试及部署的时间。
物理机 虚拟机 容器对比
容器化和虚拟化解决的方面和业务场景是不同的,所以两种技术并驾齐驱,相辅相成。虚拟化是硬件层面的隔离,而容器化是APP级别的隔离。
云产品结合虚拟化和容器化技术
Docker 容器、镜像工作流
客户端client发送命令,docker daemon(docker守护进程)收到请求,执行操作,比如拉取操作镜像就会从仓库register拉取,拉取到本地镜像image中,从而生成容器镜像 image 是docker中的模板,根据模板构造容器,一个镜像可以创建多个容器。
Docker公司运营的公共仓库叫做 Docker Hub (https://hub.docker.com/),存放了数量庞大的镜像供用户下载,国内的公有仓库包括阿里云 、网易云等。
国内公共镜像仓库
Docker 三大核心
镜像(Image)
镜像是Docker运行容器的前提。Docker运行容器前需要本地存在对应的镜像,如果镜像不存在本地,Docker会尝试先从默认镜像仓库下载(默认使用Docker Hub公共注册服务器中的仓库),用户也可以通过配置,使用自定义的镜像仓库。Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。一个镜像可以包含一个基本的操作系统环境。
容器(Containesr)
Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行的一个实例。可以将其创建、启动、开始、停止、删除,而这些容器都是彼此互相隔离、互不可见的。可以把容器看作是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。
仓库(Repository)
Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。一个容易与之混淆的概念是注册服务器(Registry)。实际上注册服务器是存放仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。
操作系统版本信息
[root@localhost ~]# cat /etc/os-version
[Version]
SystemName=UOS Server
SystemName[zh_CN]=统信服务器操作系统
ProductType=Server
ProductType[zh_CN]=服务器
EditionName=e
EditionName[zh_CN]=e
MajorVersion=20
MinorVersion=1060
OsBuild=12038.101.100
dnf安装docker
dnf install docker
系统软件包部署docker 版本为18.09
启动服务
systemctl enable docker
systemctl start docker
配置国内镜像仓加速器
vim /etc/docker/daemon.json
{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]}
重启docker
systemctl daemon-reload
systemctl restart docker
Docker 二进制包官方下载链接
x86 架构
https://download.docker.com/linux/static/stable/x86_64/
aarch 架构
https://download.docker.com/linux/static/stable/aarch64/
二进制部署docker
1、下载 docker二进制包文件
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.9.tgz
2、解压docker压缩包
tar -zxvf docker-20.10.9.tgz
3、移动二进制文件到/usr/local/目录
mv docker /usr/local/
4、设置环境变量
docker程序环境变量
echo "export PATH=\$PATH:/usr/local/docker" >>/etc/profile
重载环境变量
source /etc/profile
5、创建docker用户和组
groupadd docker
useradd -s /sbin/nologin -M -g docker docker
6、 systemd 管理docker.service服务
vim /usr/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
#docker 执行程序未放在/usr/bin目录下,需指定环境变量/usr/local/docker
Environment="PATH=/usr/local/docker:/usr/bin:/usr/sbin"
Type=notify
ExecStart=/usr/local/docker/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
注意:docker 执行程序未放在/usr/bin目录需指定环境变量/usr/local/docker。
Environment="PATH=/usr/local/docker:/usr/bin:/usr/sbin"
7、配置国内的公有仓库
创建docker 目录
mdkir -p /etc/docker
编辑daemon.json
vi /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com"
]
}
8、启动docker
systemctl start docker && systemctl enable docker
9、查看docker 版本
docker -v
Docker运行MySQL容器
拉取mysql镜像
指定版本
docker pull mysql:8.0.30
拉取最新的mysql
docker pull mysql:latest
查看images镜像
docker images
启动容器并拷贝配置文件
docker run -itd -p 3306:3306 --name mysql-server --privileged=true -e MYSQL_ROOT_PASSWORD=password -e TZ=Asia/Shanghai mysql:8.0.30
docker run 参数介绍
docker run [OPTIONS] 镜像名:标签名
-i 表示交互式运行容器(就是创建容器后,马上会启动容器,并进入容器 ),通常与 -t 同时使用 。
-t 启动后会进入其容器命令行, 通常与 -i 同时使用; 加入 -it 两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name 为创建的容器指定一个名称 。
-d 创建一个守护式容器在后台运行,并返回容器ID;
-v 表示目录映射, 格式为:-v 宿主机目录:容器目录
注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
-p 端口映射,格式为:-p 宿主机端口:容器端口
-it 运行容器并进入该容器的终端
-id 后台运行容器
--privileged=true 映射多级目录,防止出现没有权限
--restart=always 容器随docker服务启动
访问容器
docker exec -it mysql-server /bin/bash
复制配置文件
docker cp mysql-server:/etc/my.cnf /docker/mysql/conf/my.cnf
删除启动的容器
docker rm -f mysql-server
创建数据持久化的文件夹
mkdir -p /docker/mysql/conf
mkdir -p /docker/mysql/data
mkdir -p /docker/mysql/logs
启动MySQL容器并数据持久化
docker run -itd --name mysql-server --privileged=true -p 3306:3306 \
-v /docker/mysql/conf/my.cnf:/etc/my.cnf \
-v /docker/mysql/data:/var/lib/mysql \
-v /docker/mysql/logs:/logs \
-e MYSQL_ROOT_PASSWORD="password" -e TZ=Asia/Shanghai -d mysql:8.0.30 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
docker 运行参数介绍
提升root权限
--privileged=true
远程连接端口
-p 3306::3306
将配置文件挂载到容器中的配置文件
-v /docker/mysql/conf/my.cnf:/etc/my.cnf
将数据文件夹挂载到容器中存放数据的文件夹
-v /docker/mysql/data:/var/lib/mysql
挂载日志
-v /docker/mysql/logs:/logs
设置时区
-e TZ=Asia/Shanghai
限制内存大小
--memory=4G或4096M
限制CPU
--cpus=2
访问容器
docker exec -it --user root mysql-server /bin/bash
宿主机对容器执行命令
docker exec mysql-server /bin/bash -c 'pwd'
Docker 常用命令
查看docker 版本信息
docker version
查看docker 信息
docker info
镜像管理
拉取镜像
docker pull 镜像名
docker pull 镜像名:tag
搜索镜像
docker search 镜像名
删除镜像
docker rmi 镜像ID/镜像名
容器运行信息
查看容器状态
docker ps -a
更换容器名
docker rename 容器ID/容器名 新容器名
查看docker工作目录
sudo docker info | grep "Docker Root Dir"
查看docker磁盘占用总体情况
du -hs /var/lib/docker/
查看Docker的磁盘使用具体情况
docker system df
查看容器的信息
docker inspect mysql-server
进入容器方式
docker exec -it 容器名/容器ID /bin/bash
容器启停管理
启动容器
docker start 容器ID/容器名
停止容器
docker stop 容器ID/容器名
kill 容器
docker kill 容器ID/容器名
重启容器
docker restart 容器ID/容器名
删除容器
删除一个容器
docker rm -f 容器名/容器ID
删除多个容器 空格隔开要删除的容器名或容器ID
docker rm -f 容器名/容器ID 容器名/容器ID 容器名/容器ID
删除全部容器
docker rm -f $(docker ps -aq)
查看容器日志
docker logs -f --tail=要查看末尾多少行 默认all 容器ID
docker logs -f --tail=10 mysql-server
保存镜像
将镜像保存为tar 压缩文件,在任何一台安装docker的服务器上加载镜像
命令:
docker save 镜像名/镜像ID -o 镜像存储路径
docker save mysql-server -o /opt/ mysql-server.tar
加载镜像
加载镜像保存文件,使其恢复为一个镜像
docker load -i 镜像保存文件位置
查看镜像
docker images -a
容器生命周期运维流程
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有