docker的基本概念和用法
# docker的基本概念
它是一种容器化技术,将应用运行在容器中,与其他应用隔离互不影响。很多应用部署在同一台物理机上,服务之间会争抢系统资源,一个服务过载可能会影响其他服务,为了解决这种问题,出现了虚拟机,在物理机上装了很多虚拟机,虚拟机里面运行应用。某虚拟机里面的应该不会影响其他应用,但是我们发现它的资源没有得到充分的运用,很多资源消耗在虚拟机上了,真正分配到应用上的资源很少。
# docker的架构
# Docker daemon(后台守护进程)
docker后台守护进程,负责监听客户端命令行请求和管理docker对象(镜像,容器,网络和数据卷)
# Docker client(客户端)
Docker client 是用户和docker交互的一种方式,例如使用 docker run
等命令,客户端发送命令给docker后台进程 。
# Containers(容器)
容器是一个镜像的实例,我们的APP就运行在容器中实现了运行环境的隔离,但是它又是非常的轻量级,比虚拟机省资源。
# images(镜像)
它是一个只读模板,用于描述一个可运行的容器,类似于Java中类和对象的关系
# Docker registries (注册中心)
注册中心保存docker镜像,Docker Hub (opens new window) 是公共的注册中心,包含很多开源软件的镜像,你可以从这里 下载你需要的镜像(Tomcat,Java,Redis,Nginx等)
# 安装Docker
# 1. 删除旧版本(如果新机器忽略)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 2. 设置yum下载
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
1
2
2
# 3. 安装docker引擎
# 查看版本
$ yum list docker-ce --showduplicates | sort -r
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
docker-ce.x86_64 3:24.0.6-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.5-1.el7 docker-ce-stable
docker-ce.x86_64 3:24.0.4-1.el7 docker-ce-stable
# 安装指定版本
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
# 直接安装最新版本
$ sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
$ systemctl start docker
$ systemctl enable docker
# 检查安装版本
$ docker version
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 4. 国内加速服务
配置镜像加速器 ,编辑配置文件 /etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://hub.uuuadc.top",
"https://docker.anyhub.us.kg",
"https://dockerhub.jobcher.com",
"https://dockerhub.icu",
"https://docker.ckyl.me",
"https://docker.awsl9527.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 使用示例
# 1. 部署一个Nginx应用
快速部署:
$ docker run -d --name nginx -p 80:80 nginx
1
# 2. 构建一个Spring Boot 镜像并运行
Dockerfile内容示例
# 使用Java 8
FROM java:8
# 挂着一个目录
VOLUME /tmp
# 把jar包拷贝到容器中
ADD target/admin-server.jar app.jar
# 这个是给镜像使用者看的,告诉使用者容器暴露这个端口
EXPOSE 9080
# 接收参数 ,参数只有在构建节点有用
ARG env="dev"
# 环境变量,在启动阶段也生效
ENV env ${env}
# 容器启动时,会执行ENTRYPOINT的命令
ENTRYPOINT ["java","-jar","/app.jar","--spring.profiles.active=${env}"]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
根据Dockerfile构建一个镜像,在Dockerfile所在的目录执行
$ docker build .
1
# 3. 将镜像推送到私有仓库
# 创建私有仓库
$ docker run -d -p 5000:5000 --restart=always --name registry registry
# 查看本机已有的仓库
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
myjob/admin-server latest 60779a9b5f5c 47 hours ago 663MB
nginx latest f5a6b296b8a2 13 days ago 187MB
# 使用docker tag打标签
$ docker tag myjob/admin-server:latest 127.0.0.1:5000/admin-server:latest
# 使用 docker push上传镜像
$ docker push 127.0.0.1:5000/admin-server:latest
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# docker compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
1
chmod +x /usr/local/bin/docker-compose
1
上次更新: 2024/08/26, 14:20:28