官网: https://docs.docker.com/
官网: https://www.docker.com/
docker 镜像市场: https://hub.docker.com/
一、docker 说明
1.1、docker 核心
1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源,Docker 是一个 CS 架构软件。
2、Docker 是一个虚拟化轻量级linux服务器,可以解决我们在开发环境中运行配置问题
3.、Docker的主要目标是‘build ,ship and run any app,anywhere’,一次封装,到处运行
4、容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
1.2、docker 版本问题
.Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
1.3、docker 架构( 3大核心)
· 1、Images 镜像 (等于软件)
· 2、Registry 仓库 (等于软件市场)
· 3、Containers 容器 (等于win系统, 可以下载并运行软件)
1.4、制作运行镜像流程
如: 部署一个springboot 项目到docker
- 1、第一步 制作并上传镜像 到 docker仓库
- 2、第二步 拉取镜像并创建一个独立的docker容器
- 3、第三步 运行容器,启动服务
二、安装docker
2.1、安装
注意事项
- 系统内核需要在 3.1 以上
- 系统版本需要在 7.1 以上(7.0)
- lsb 命令 需先安装 :
yum install -y redhat-lsb
## 查看系统内核 及 系统版本
uname -r
lsb_release -a
## 卸载旧版本(如果安装过旧版本的话
yum remove docker docker-common docker-selinux docker-engine
## 安装需要的软件包, yum-util 提供yum-config-manager功能,
## 另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
## 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
## 查看所有 docker 版本
yum list docker-ce --showduplicates | sort -r
## 指定版本进行安装
yum install -y docker-ce-18.03.1.ce-1.el7.centos
## 启动
systemctl start docker
## 加入开机启动
systemctl enable docker
## 查询 docker进程
ps aux | grep 'docker'
## 查询 docker版本
docker -v
2.2、配置Docker镜像地址
阿里云镜像地址(可跳过):
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
执行下方命令配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://076hklze.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
查看是否配置成功,使用命令: docker info
三、镜像
docker 镜像市场: https://hub.docker.com/
3.1、docker search 命令
- docker search -s 30 mysql 只列出点赞数超过30以上
- 镜像 latest 表示为最新的镜像文件
3.2、docker pull 命令
- 如
docker pull nginx
默认为docker pull nginx:latest
(拉取最新版本) - 拉取时 nginx:版本号 , 版本号可以使用
docker search
命令搜索获取
3.3、docker images 命令
查询镜像展示内容说明
- REPOSITORY 存储库名称
- Tag 镜像的标签 不写版本号码 默认下载最新latest镜像
- IMAGE ID 镜像id
- CREATED 创建时间
- SIZE 大小
3.4、其他镜像相关命令
查看 五、docker 命令大全
四、容器
4.1、docker run 创建容器常用命令说明
- -name 为容器设置名称, 在后续查日志和操作容器可直接使用该命名 (不在使用自动分配的容器 id)
- -v 表示宿主机的 /docker/xijia 目录为容器中的 /data 的挂载目录
- -p 指定端口映射,格式为:主机(宿主)端口:容器端口
- -d 后台运行,不直接进入容器
- -i 以交互模式运行容器,通常与 -t 同时使用
- -t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -m :设置容器使用内存最大值;
4.2、docker run 命令示例
## 使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
## 使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
## 使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
## 绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
$ docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
## 使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
后台启动的docker 容器可以使用以下命令输出实时日志
docker logs -f <container>
更多项见: https://www.runoob.com/docker/docker-run-command.html
五、docker 命令大全
5.1、docker 基础相关命令
docker logs <container> 查看container的日志,也就是执行命令的一些输出
docker inspect <image|container> 查看image或container的底层信息
docker version 查看docker的版本号,包括客户端、服务端、依赖的Go等
docker info 查看系统(docker)层面信息,包括管理的images, containers数等
systemctl start docker 启动
sudo systemctl daemon-reload 守护进程重启
systemctl restart docker 重启docker服务
sudo service docker restart 重启docker服务
service docker stop 关闭docker
systemctl stop docker 关闭docker
5.2、images 镜像相关命令
## 搜索下载
docker search <image> 在镜像仓库中 搜索 image (同 https://hub.docker.com/ 内容)
docker pull <image> 从镜像仓库 下载 image
## 查询本地镜像
docker images -a 列出所有本地 images
docker images -q 列出所有本地: 只显示镜像的id
docker images --digests 列出所有本地: 显示镜像的摘要信息
docker images --no-trunc 列出所有本地: 显示完整镜像信息
## 删除镜像
docker rmi <image...> 删除一个或多个image
docker rmi -f <image...> 强制删除一个或多个image
5.3、container 容器相关命令
## 创建容器
docker run <image> <command> 使用image创建container并执行相应命令,然后停止
docker run -i -t <image> /bin/bash 使用image创建container并进入交互模式, login shell是/bin/bash
docker run -i -t -p <host_port:contain_port> 将container的端口映射到宿主机的端口
docker attach <container> attach一个运行中的container
## 启动/停止/重启 容器
docker start <container> 开启container(运行后会自动关闭容器)
docker start -i <container> 启动一个container并进入交互模式(运行后容器一直处于运行状态)
docker stop <container> 停止container
docker restart <container> 重启container
## 查询容器
docker ps 默认显示正在运行中的container(容器)
docker ps -l 显示最后一次创建的container,包括未运行的
docker ps -a 显示所有的container,包括未运行的
## 删除容器
docker rm <container...> 删除一个或多个container -f强制删除
docker rm `docker ps -a -q` 删除所有的container
docker ps -a -q | xargs docker rm 同上, 删除所有的container
## 进入容器内部
docker exec -it f871701b9add bash 进入容器,f871701b9add 为容器id(docker ps 查看)
docker exec -it f871701b9add sh 进入容器方式2, 方式1 可能会遇到错误
exit 容器内退出容器
5.4、docker 容器里的服务宕机自动重启
1、在创建容器时(docker run)加入参数
--restart=always
2、如果容器已经在创建,则使用docker update 加上自动重启的参数:
docker update --restart=always <CONTAINER ID/NAME>
3、查看是否成功
docker inspect <CONTAINER ID/NAME>
查看是否成功
5.5、制作镜像 相关命令
tag = 版本号
path = linux 文件路径
Dockerfile = 配置文件
docker commit <container> [repo:tag] 将一个 container容器 打成一个新的 image镜像,后面的repo:tag可选, 让其自带修改容器后的内容
docker build <path> 寻找path路径下名为的Dockerfile的配置文件,使用此配置生成新的image
docker build -t repo[:tag] 同上,可以指定repo和可选的tag
docker build - < <dockerfile> 使用指定的dockerfile配置文件,docker以stdin方式获取内容,使用此配置生成新的image
docker port <container> <container port> 查看本地哪个端口映射到container的指定端口,其实用docker ps
5.6、 删除所有容器和镜像
## 删除所有的容器
docker rm $(docker ps -aq)
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
## 删除所有的镜像
docker rmi $(docker images -q)
六、Docker 安装相关服务
6.1、安装 nginx 静态文件服务器
镜像查看地址: https://hub.docker.com/search?q=nginx&type=image
1、创建挂载目录
mkdir -p /data/nginx/{conf,conf.d,html,logs}
2、创建启动 nginx 容器
docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx
启动命令说明:
- -name 给容器命令
- -d 后台启动
- -p 指定端口, 外部访问 81 映射到 容器内 nginx 的80端口
- -v 挂载, 容器内的 /usr/share/nginx/html 目录挂载到主目录:/data/nginx/html 下
3、在挂载目录 /data/nginx/html (宿主机目录, 非容器内目录)创建 index.html
## 进入目录
cd /data/nginx/html
## 创建index,html文件
touch index.html
## 编辑(自行使用vim命令进行编辑或远程编辑)
vim index.html
4、 访问Nginx
打开电脑的浏览器服务 ip:81, 如: http://192.168.43.230:81/
后面部署静态文件 直接放到挂载目录就可以了,无需重启Nginx服务
七、DockerFile 使用
7.1、DockerFile 文件说明
dockerfile 是镜像的配置文件
在需要制作镜像的 dockerfile文件目录执行 docker build 打包成一个镜像文件
在使用 docker run 镜像文件名称运行自己制作的镜像即可
DockerFile编写规范
A.#描述注释
B.指令必须要大写,后面至少需要带至少一个参数;
C.指令是按照从上到下,顺序执行;
DockerFile 文件中的指令
- 1.FROM 指定父镜像: 基于哪个镜像image构建 指定基础镜像,必须为第一个命令
- 2.MAINTAINER :维护者
- 3.RUN: 容器创建的时候执行一段命令 构建镜像时执行的命令
- 4.ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
- 5.COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
- 6.CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
- 7.ENV: 设置环境变量
- 8.EXPOSE: 指定于外界交互的端口
- 9.VOLUME 用于指定持久化目录
- 10.WORKDIR 设置进入容器时的路径
7.2、制作一个自定义 Centos 镜像系统
需求: hub仓库中的 centos 系统没有vim 命令, 自己扩展一个有 vim 插件的 centos 系统的镜像
1、创建镜像文件 Dockerfile 并编写内容
## 依赖镜像
FROM centos
## 作者
MAINTAINER xiaoer
## 配置环境变量
ENV MYPATH /usr
## 进入容器中默认访问到的目录 (环境变量配置的目录)
WORKDIR $MYPATH
## 容器执行时执行安装 vim 的命令
RUN yum -y install vim
## 暴露外部访问端口
EXPOSE 80
## 启动启用默认执行, 启动默认进入容器
CMD /bin/bash
2、制作镜像并 启用容器
## 运行命令制作镜像 (需要在Dockerfile 文件目录)
docker build -f Dockerfile -t xijia:1.0.0
## 创建容器并启用
docker run -it xijia:1.0.0
7.3、springboot 项目打镜像并运行
7.3.1、创建Dockerfile 文件
在 /docker/xijia-tool-app/server 目录中创建 Dockerfile 文件
如何是自己的目录 和 jar 包记得切换下方对应的内容
## 依赖环境
FROM openjdk:8-jdk-alpine
# 作者
MAINTAINER xijia-xiaoer
## 拷贝/复制文件
ADD xijia-tool-app-server-pro.jar /data/xijia-tool-app-server-pro.jar
## 指定容器目录 /data 挂载到 /var/lib/docker/volumes/随机名, run 命令可更改指定容器目录 /data 挂载位置
VOLUME /data
## run容器后的执行命令
ENTRYPOINT ["java","-jar","-Xms256m","-Xmx512m","-Dspring.profiles.active=pro","/data/xijia-tool-app-server-pro.jar"]
#暴露9062端口
EXPOSE 9062
7.3.2、上传 jar
7.3.3、执行命令
## 创建镜像
docker build -t xijia-tool-app-server:v1 .
## 创建并启动容器
docker run --name xijia-tool-app-server -v /docker/xijia-tool-app/server:/data -p 9062:9062 -d -it xijia-tool-app-server:v1 /bin/bash
## 查看启动状态,输出实时日志(启动容器后执行)
docker logs -f xijia-tool-app-server
更多操作详见另外一篇 spring-boot项目配置自动部署文章: https://blog.csdn.net/qq_41463655/article/details/121486210
八、Docker Compose 容器编排
8.1、容器编排作用
- 容器编排 主要作用与环境的一键安装, 比如微服务需要, Mysql,Redis,Nocos,Nginx,Kafka, ES 等诸多环境,
- 使用容器编排技术可以一次性安装所有的相关环境, 并且可以根据自己的需求对安装顺序做配置, 比如 Nocos 需要 Mysql 的支持, 可以先安装 Redis, 在安装 Nocos
8.2、安装 Docker Compose 组件
ginhub 地址: https://github.com/docker/compose/releases
当前使用的的镜像地址(速度快): http://get.daocloud.io/#install-compose
## 拉取镜像,当前我下载的2.2.3 最新版本
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.2.3/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
## 修改文件为可执行
chmod +x /usr/local/bin/docker-compose
## 查看版本
docker-compose --version
## 卸载
sudo rm /usr/local/bin/docker-compose
版本yml编写规范: https://docs.docker.com/compose/compose-file/compose-versioning/
8.3、Docker Compose 常用命令
docker-compose -h # 查看帮助
docker-compose up # 创建并运行所有容器
docker-compose up -d # 创建并后台运行所有容器
docker-compose -f docker-compose.yml up -d # 指定模板
docker-compose down # 停止并删除容器、网络、卷、镜像。
docker-compose ps # 列出项目中所有的容器
docker-compose logs # 查看容器输出日志
docker-compose pull # 拉取依赖镜像
dokcer-compose config # 检查配置
dokcer-compose config -q # 检查配置,有问题才有输出
docker-compose restart # 重启服务
docker-compose start # 启动服务
docker-compose stop # 停止服务
8.4、使用容器编排同时安装 Nginx+Redis+Mysql
docker-compose文档地址: https://docs.docker.com/compose/reference/
docker-compose v3编写文档快速入口: https://docs.docker.com/compose/compose-file/compose-file-v3/
1、创建文件: docker-compose.yml 并添加内容
version: "3.6"
services:
## 安装nginx
nginx:
# 远程仓库镜像与版本
image: "nginx:1.21.6"
# 自定义的容器名称
container_name: "nginx-1.21.6"
# 环境变量
environment:
- LANG=C.UTF-8
- LC_ALL=C.UTF-8
# 挂载数据卷(注意, 需要提前创建 nginx.conf 配置文件并进行配置, 默认创建的是文件夹)
volumes:
- "./nginx/nginx1.21.6/data:/data"
- "./nginx/nginx1.21.6/conf/nginx.conf:/etc/nginx/nginx.conf:ro"
# 端口映射
ports:
- "80:80"
- "443:443"
## 安装redis
redis:
image: redis:6.2.6
container_name: redis-6.2.6
# 服务宕机自动重启
restart: always
environment:
- TZ=Asia/Shanghai
ports:
- 6379:6379
volumes:
- ./redis/redis-6.2.6/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./redis/redis-6.2.6/data/:/data
command: ["redis-server","/usr/local/etc/redis/redis.conf"]
## 安装mysql
mysql:
image: "mysql:5.7.16"
container_name: "mysql5.7.16"
environment:
MYSQL_ROOT_PASSWORD: "123456"
volumes:
- "./mysql/mysql5.7/data:/data/mysql"
- "./mysql/mysql5.7/conf/my.cnf:/etc/my.cnf"
ports:
- "3306:3306"
2、对应docker-compose.yml 中的数据卷配置文件
对应的 yml 配置中的 redis + nginx +mysql 的挂载的数据卷 目录及文件可通过下方地址下载
链接:https://pan.baidu.com/s/1lh8l3n1hJs7ehtOK8m67yQ
提取码:v06f
3、运行进行环境一键安装
## 运行
docker-compose up
等待安装即可
4、测试环境
测试 nginx,访问挂载目录下 /data/html/index.html 文件
挂载目录
访问
测试redis , 使用 redis.conf 507行配置文件配置的密码: 123456 连接
测试数据库, 使用 root yml 配置的 123456 进行连接
九、Docker 可视话工具 Portainer
9.1、安装 Portainer
## 创建并启动
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
9.2、访问
http://192.168.43.230:9000/
首次进入创建密码
进入后选 Local , 也可以远程连其他主机的docker, 下面可以直接在控制台 进行相关容器管理
注意: 我是用了浏览器翻译插件,所以显示的中文
结尾
关注公众号【兮家】,不定时分享干货内容哦
-
个人开源项目(通用后台管理系统)–> https://gitee.com/wslxm/spring-boot-plus2 , 喜欢的可以看看
-
本文到此结束,如果觉得有用,动动小手点赞或关注一下呗,将不定时持续更新更多的内容…,感谢大家的观看!