前言
• Docker 是一个开源的应用容器引擎
• 诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
• Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux 机器上。
• 容器是完全使用沙箱机制,相互隔离
• 容器性能开销极低。
• Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)
提示:重点理解docker架构,特别是镜像、容器概念。
一、Docker架构
镜像(Image):Docker镜像(Image),就相当于是一个 root 文件系统。
比如官方镜像 ubuntu:16.04就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
二、Docker安装部署
一、设置docker的镜像仓库
- (1)安装必要工具
yum install -y yum-utils device-mapper-persistent-data lvm2
- (2)设置下载的镜像仓库
两个都可以使用,建议用阿里云仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
- (3)设置docker镜像源
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
- (4)设置元数据
根据自己的操作系统选择
yum makecache fast #CentOS7 设置元数据命令
dnf makecache #CentOS8 设置元元数据命令
二、开始安装
- (一)卸载冲突工具
卸载 podman 和 buildah 这两个软件包
yum erase podman buildah
- (二)安装docker
docker-ce: Docker 的社区版。
docker-ce-cli: Docker 的命令行工具。
containerd.io: Docker 的容器运行时。
yum install docker-ce docker-ce-cli containerd.io -y
查看安装的docker版本(启动docker后才能使用docker命令)
docker --version
- (三)启动Docker
#启动docker
systemctl start docker
#查看docker 运行状态
systemctl status docker
- (四)为Docker配置镜像源
后续使用 docker 安装 nacos mysql nginx 等镜像。
docker的镜像加速源默认是官方的国外地址,我们将替换成国内镜像加速源。
docker镜像加速源跟宿主机的镜像地址没有任何毛关系,因此需要自己额外配置
(1)创建docker配置文件
一般配置文件都放在 /etc目录下,因此我们在/etc目录下创建一个文件夹,存放docker镜像加速文件
sudo mkdir -p /etc/docker
(2)配置镜像加速源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://akchsmlh.mirror.aliyuncs.com"]
}
EOF
上面的要是不好使就用下面这个,这个是比较全的一些加速源
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn",
"https://mirror.baidubce.com",
"https://docker.1panel.live",
"https://2epe3hl0.mirror.aliyuncs.com"
]
}
EOF
(3)查看镜像加速问价内容是否配置成功
cat /etc/docker/daemon.json
(4)加载镜像源文件
sudo systemctl daemon-reload
(5)重启docker
systemctl restart docker
(6)设置docker开机自启
systemctl enable docker
三、Docker 常用命令
命令流程图
Docker进程相关命令
(一)启动 docker 服务
systemctl start docker
(二)重启 docker 服务
systemctl restart docker
(三)停止 docker 服务
systemctl stop docker
(四)查看 docker 服务状态
systemctl status docker
(五)设置开机启动 docker 服务
systemctl enable docker
Docker 镜像相关命令
(一)查看镜像
查看本地所有镜像
docker images
docker images -q #查看所有镜像的id(-q :quiet[清晰的]的缩写
各个选项说明:
- REPOSITORY: 镜像所属的仓库名称或源(也是镜像名称)
- TAG : 镜像的标签。标签是镜像的版本标识符。一个镜像可以有多个标签
- IMAGE ID : 镜像ID。这是一个长的哈希值(通常是 SHA256),唯一地标识每个镜像
- CREATED : 镜像创建时间。显示镜像被创建的时间戳或相对时间。例如,2 weeks ago、2024-12-31
14:32。这可以帮助你了解镜像的更新情况 - SIZE : 镜像大小。显示镜像文件的总大小,例如 123MB、2.5GB。这个信息对存储和管理镜像的磁盘空间很重要
(二)搜索镜像
从网络中查找需要的镜像
docker search 镜像名称
例如:查询mysql 镜像
docker search mysql
(三)拉取镜像
docker pull 镜像名称
docker pull mysql #拉取mysql镜像,没指定版本号,默认最新版本镜像
(四)删除镜像
删除本地镜像
docker rmi 镜像id
docker rmi -f 镜像名/镜像ID
#批量删除镜像
docker rmi $(docker images -aq)
docker rmi 'docker images -aq'
(五)保存镜像
docker save -o [保存路径/镜像文件名].tar [镜像名]:[标签]
在/root 目录下有个test文件,将mysql的镜像文件打包成tar包保存
docker save -o /root/test/mysql.tar mysql:latest
(六)加载镜像
docker load -i [镜像文件名].tar
将上述的mysql.tar镜像文件包,加载成镜像
docker load -i mysql.tar
(七)创建镜像
自定义镜像,可以将我们微服务制作成镜像。
docker build -t <image_name>:<tag> <path_to_dockerfile_directory>
-t: 为镜像指定标签(<image_name>:)。例如,myapp:latest。
<path_to_dockerfile_directory>: 指定包含 Dockerfile 的目录路径。. 表示当前目录。
Docker 容器相关命令
(一)查看容器
1、查看正在运行的容器
docker ps
输出的各项说明:
- CONTAINER ID: 容器的唯一标识符。
- IMAGE: 容器使用的镜像。
- COMMAND: 启动容器时执行的命令。
- CREATED: 容器创建的时间。
- STATUS: 容器的当前状态,如 Up 2 minutes 表示容器正在运行且已经运行了 2 分钟。
- PORTS: 容器端口映射到主机的端口。
- NAMES: 容器的名称。
2、查看所有的容器
正在运行的容器和已停止运行的容器
docker ps -a
3、查看最近运行的两个
docker ps -a -n=2
4、查看正在运行的容器的id
docker ps -q
5、查看所有容器的id
docker ps -aq
6、查看容器内部进程
docker top <容器id或名称> bash
7、与容器内部进行交互
docker exec -it <容器id或名称> bash
8、查询最后一次创建的容器
docker ps -l
(二)查看容器日志
1、查看容器运行日志
docker logs <容器id或名称>
2、实时展示容器日志
docker logs -f <容器id或名称>
3、加入时间戳展示日志
docker logs -tf <容器id或名称>
4、查看最后n行日志
docker logs --tail 5 <容器id或名称>
(三)启动容器
1、docker 启动一个容器
docker run -it <镜像名称> /bin/bash
docker run -it ubuntu /bin/bash #启动ubuntu镜像
参数说明:
- -i:交互式操作
- -t:终端
- -d:后台启动
2、启动已停止运行的容器
docker start <容器id>
3、重启一个容器
docker restart <容器id>
4、启动容器并将容器挂载后台运行
docker run -itd --name ubuntu-test ubuntu /bin/bash ##启动一个ubuntu容器
参数说明:
- -d:默认不会进入容器
5、启动容器映射端口号,后台启动,指定容器名称
docker run -p 8080:8080 --name 容器名称 -d 镜像名称:版本号
6、容器重启 --restart
- always
始终重启容器,无论容器是正常退出还是崩溃退出。
如果容器停止运行,它会自动重启,甚至 Docker 守护进程重新启动后,容器也会自动启动。
docker run --restart always [其他选项] <镜像名>
- unless-stopped
与 always 类似,但如果手动停止了容器(使用 docker stop),容器不会自动重新启动,除非 Docker 守护进程重启。
- on-failure
仅在容器非正常退出时重启(例如退出代码不是 0)。可以指定一个最大重启次数。
docker run --restart on-failure [最大重启次数] [其他选项] <镜像名>
- no
不设置自动重启策略,这是默认的行为,容器在停止后不会自动重启。
docker run --restart no [其他选项] <镜像名>
- 查看容器的重启策略
docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' <container_id_or_name>
(四)停止容器
1、停止
docker stop <容器名称或者容器id>
2、杀死一个容器
docker kill <容器名称或者容器id>
3、停止全部容器
docker stop $(docker ps -a -q)
(五)删除容器
docker rm <容器id或者名称>
docker rm -f <容器id或者名称>
docker rm -f $(docker ps -aq) #删除全部容器
(六)进入容器内部
1、进入容器后,退出容器,容器停止
docker attach <容器id>
2、进入容器后,退出容器,不会导致容器停止
docker exec <容器id>
docker exec <容器id> /bin/bash
(七)退出容器内部
exit