docker

docker

基本概念

仓库(Repository)

类似于 git,可看做是一个代码控制中心,用来保存镜像

镜像(Image)

相当于是一个 root 文件系统

容器(Container)

镜像和容器的关系,java 中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实例,容器可以被创建、启动、停止、删除、暂停等


在 centos-7 上安装 Docker 和 Docker Compose

一、安装 Docker

1. 卸载旧版本(若有)

sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine

2. 安装依赖包

sudo yum install -y yum-utils device-mapper-persistent-data lvm2

3. 添加 Docker 仓库

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

4. 安装 Docker Engine

sudo yum install -y docker-ce docker-ce-cli containerd.io

5. 配置 docker 镜像加速器(常常不可用,若如此,则替换其他可用源地址)

i. 编辑文件 /etc/docker/daemon.json (若无 daemon.json 文件则在此目录下创建)


 {
 	"registry-mirrors": [
 		"https://docker.1ms.run",
 		"https://mirror.baidubce.com"
 	]
 }

ii. 若 docker 已启动,则重启,使其生效
sudo systemctl start docker

5. 启动 Docker

sudo systemctl start docker

6. 设置开机自启

sudo systemctl enable docker

7. 验证安装

sudo docker --version

二、安装 Docker Compose

1. 下载 Docker Compose 二进制文件.[版本号可替换为最新稳定版(参考官网:https://github.com/docker/compose/releases)]

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose

2. 赋予执行权限

sudo chmod +x /usr/local/bin/docker-compose

3. 创建软链接(可选)

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

说明:
Linux 系统会从 PATH 环境变量指定的目录中查找可执行命令。默认情况下:
1. /usr/bin 是系统级命令的标准存放目录,已包含在 PATH 中,任何用户都能直接调用该目录下的命令。
2. /usr/local/bin 通常用于存放用户手动安装的软件,虽然大部分系统也会将其加入 PATH,但少数情况下可能存在路径识别问题。
创建软链接后,无论系统是否识别 /usr/local/bin,都能通过 /usr/bin/docker-compose 找到并执行命令,避免出现 “docker-compose: command not found” 的错误。
简单说:这一步是为了让系统更可靠地识别 docker-compose 命令,确保在任何目录下都能直接使用 docker-compose 而不报错。

4. 验证安装

docker compose version


安装应用

创建编排文件: docker-compose.yaml (yaml 文件内容中不要有 tab(idea 提示会红色波浪线),若有,使用空格)


version: '3.1'

services:
  wordpress:
    image: wordpress
    container_name: wordpress_app
    restart: always
    ports:
      # 映射端口,外部通过宿主机端口访问容器内的应用
      # 	第 1 个端口: 宿主机的端口 
      # 	第 2 个端口: 应用在容器内部的端口(wordpress 默认 80 端口)
      - "80:80"
    environment:
      # 数据库地址
      WORDPRESS_DB_HOST: wordpress_db
      # 数据库用户名
      WORDPRESS_DB_USER: wordpress
      # 数据库密码
      WORDPRESS_DB_PASSWORD: wordpress
      # 数据库名称
      WORDPRESS_DB_NAME: wordpress
      # 数据卷 volume /ˈvɒljuːm/ n.卷,册,书卷. docker 持久化数据的方式: 宿主机路径挂载容器路径,和容器解耦,删除容器时不会自动删除 volume
    volumes:
      # - 宿主机路径:容器路径
      - /usr/local/test/my_wordpress:/var/www/html

  db:
    image: mysql:5.7
    container_name: wordpress_db
    restart: always
    ports:
      - "3306:3306"
    environment:
      # 数据库名称
      MYSQL_DATABASE: wordpress
      # 数据库用户名
      MYSQL_USER: wordpress
      # 数据库密码
      MYSQL_PASSWORD: wordpress
      # 数据库ROOT用户密码
      MYSQL_RANDOM_ROOT_PASSWORD: root
    volumes:
      - /usr/local/test/my_mysql:/var/lib/mysql

启动容器

docker compose -f docker-compose.yaml up -d

浏览器访问 wordpress

ip:80


docker 部署 springboot

https://blog.csdn.net/m0_70590680/article/details/147140603

准备工作

  1. 创建目录: /usr/local/test/docker-springboot 和 /usr/local/test/docker-springboot/logs

  2. logback 中指定的日志文件使用相对目录

    logs/app.log ...
  3. 将构建好的 demo.jar 包上传到 /usr/local/test/docker-springboot 目录下.(这里为方便测试,手动构建,手动上传)

  4. pom.xml 指定主类时,skip 不能为 true
    通过 maven 打包时,若设置 skip 为 true,则生成的是普通的 jar 文件,而不是可执行的Spring Boot fat jar,因此这里不能设置为 true
    扩展: 什么时候可以设置为 true? -> 生成普通的 jar 供其他模块依赖时

 	  <plugin>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-maven-plugin</artifactId>
 		<version>${spring-boot.version}</version>
 		<configuration>
 			<!-- 指定主类 -->
 			<mainClass>com.example.MyApplication</mainClass>
 			<!-- skip 为 true 时,执行 java -jar xxx.jar 会报错:no main manifest attribute -->
 			<!-- <skip>true</skip> --> 
 		</configuration>
 		<executions>
 			<execution>
 				<id>repackage</id>
 				<goals>
 					<goal>repackage</goal>
 				</goals>
 			</execution>
 		</executions>
 	</plugin>

创建 Dockerfile 文件(文件名: Dockerfile,没有文件后缀名)


 	# 选择基础镜像
 	FROM openjdk:11-jre-slim
 	# 设置工作目录
 	WORKDIR /app
 	# 复制 jar 文件到容器中
 	COPY demo.jar test.jar
 	# 设置容器启动时执行的命令 
 	ENTRYPOINT ["java", "-jar", "test.jar"]

基于 Dockerfile 构建镜像,并定义镜像 id,命令: docker build -t <镜像名> <Dockerfile 路径>

docker build -t my_image . // . 表示当前目录

运行容器

docker run -d -p 8088:8080 --name my_container -v /usr/local/test/docker-springboot/logs:/app/logs my_image

-d: 后台运行 
-p 8088:8080:映射端口,外部通过宿主机端口访问容器内的应用.8088: 宿主机端口,8080: 应用在容器内的端口,对于 springboot 应用,在主配置文件中配置 
--name my_container: 定义容器名称 
-v /usr/local/test/docker-springboot/logs:/app/logs: 目录挂载,容器内该目录的日志会实时同步到宿主机,避免容器删除后日志丢失
my_image: 指定镜像(需确保本地已存在该镜像,或镜像仓库已存在)

查看日志

docker logs -f my_container


常用 docker 命令

容器启停

创建并启动容器(-d: 后台运行,--name: 命名容器id)

docker run -itd --name my_container image_name

启动/停止/重启容器

docker start/stop/restart container_id

删除运行中的容器(需先停止)

docker rm container_id

状态监控

查看运行中的容器

docker ps

查看容器资源占用

docker stats container_id

查看容器详细信息(包括IP、挂载等)

docker inspect container_id

镜像管理

拉取镜像(:tag 指定版本)

docker pull nginx:alpine

推送本地镜像到远程镜像仓库(如: Docker Hub、私有仓库等)

docker push [OPTIONS] NAME[:TAG]

查看本地镜像列表

docker images

删除镜像(需先删除依赖容器)

docker rmi image_id

镜像构建

通过 Dockerfile 构建镜像(.表示当前目录,因此要先进入 Dockerfile 所在目录)

docker build -t my_image .

导出/导入镜像

docker save -o nginx.tar nginx:latest
docker load -i nginx.tar

网络配置(未测试)

创建自定义网络

docker network create my_network

查看网络列表

docker network ls

将容器连接到网络

docker network connect my_network container_id

端口映射

启动时映射端口(宿主机端口:容器端口)

docker run -p 8080:80 nginx

查看端口绑定情况

docker port container_id

数据持久化

创建简单卷

docker volume create my_volume

查看数据卷

docker volume inspect my_volume


 	[
 		{
 			"CreatedAt": "2025-10-06T21:31:40+08:00",
 			"Driver": "local",
 			"Labels": null,
 			"Mountpoint": "/var/lib/docker/volumes/my_volume/_data", // 该数据卷存储在宿主机的目录
 			"Name": "my_volume",
 			"Options": null,
 			"Scope": "local"
 		}
 	]

挂载宿主机数据卷到容器内目录(若 my_volume 不存在,则先创建,相当于先执行 docker volume create my_volume)

docker run -v my_volume:容器内目录 image_name # 容器内目录示例: /aaa/bbb/ccc

  1. 双向同步,任何一边变更,立刻同步到另一边
  2. 适合生产环境(宿主机卷数据存储在 /var/lib/docker/volumes/ 目录下,普通用户无权限直接修改,需 sudo 或加入 docker 用户组)

绑定宿主机目录到容器内目录

docker run -v 宿主机目录:容器内目录 image_name

  1. 双向同步,任何一边变更,立刻同步到另一边
  2. 适合开发环境

调试与维护

进入容器内部

docker exec -it container_id /bin/bash

退出容器内部

exit 或者 Ctrl + D

查看容器日志

docker logs -f container_id

posted @ 2025-11-02 17:44  凛冬雪夜  阅读(4)  评论(0)    收藏  举报