码峰博客 – 码而思

分享积累从此时此刻开始

Docker 常用命令

Docker 常用命令

# 拉取镜像
docker pull nginx:1.21 


# 使用 Dockerfile 构建镜像 
# 使用 . 表示 Dockerfile 在当前路径下
# 可以使用命令指定 Dockerfile 路径 -f /path/to/Dockerfile
# fronted 为镜像名称,082123 为版本号tag  见下图
docker build -t fronted:082123 .
# 查看镜像列表
docker images
# 删除镜像
docker rmi 镜像id

# 本地打包
# docker save -o fronted-版本号.tar fronted:版本号(一般为日期)


# 创建一个新的容器并运行 
# --name fronted 为定义容器名称   
# fronted:082123 为镜像名称和版本
# -p 8084:80 为端口映射
docker run -d -p 8084:80 --restart=always  --name fronted  fronted:082123 
# 查看容器列表
docker ps -a
# 进入容器
docker exec -it 容器ID或容器名称 /bin/bash 
docker exec -it 容器ID或容器名称 bash
# 停止容器
docker stop 容器名称或容器ID
# 删除容器
docker rm 容器名称或容器ID


1.导出镜像:
docker save -o <保存路径/文件名.tar> <镜像名:标签>
例如:
docker save -o my_image.tar my_image:latest
2.导入镜像:
docker load -i <镜像文件.tar>
例如:
docker load -i my_image.tar

导出容器为镜像
docker export 容器id > nginx.tar
导入镜像
cat nginx.tar | docker import  - nginx:1.20.1

Docker 封装前端镜像

0.目录结构

1.前端打包后,文件放在 dist 目录下

2.创建 Dockerfile 文件

# 使用NGINX镜像
# m.daocloud.io 为加速地址
From m.daocloud.io/docker.io/library/nginx:1.22

# 复制前端到镜像指定目录
COPY dist/ /home/data/fronted/dist/
# 复制配置到镜像,覆盖nginx默认站点配置
COPY nginx.conf /etc/nginx/conf.d/default.conf

# 安装vim工具,一般为了减小镜像大小不安装
# RUN apt-get update && apt-get install -y vim

3.创建 nginx.conf 文件

server {
        listen       80;
        listen  [::]:80;
        server_name  localhost;

        location / {
            root /home/data/fronted/dist;
            index  index.html;
            try_files $uri $uri/ /index.html;
        }
}

4.构建镜像

# 构建镜像 
# 使用 . 表示 Dockerfile 在当前路径下
# fronted 为名称,082123 为版本号tag  见下图
docker build -t fronted:082123 .

# 查看镜像列表
docker images

5.启动容器

# 创建一个新的容器并运行 
docker run -d -p 8084:80 --restart=always  --name  fronted  fronted:082123 

# 预览
http://localhost:8084

Docker 封装后端镜像

使用 Dockerfile 封装后端镜像

直接使用 jar 包构建,新建 Dockerfile 文件,放入如下内容

# 

# 使用基础镜像
FROM adoptopenjdk/openjdk11:alpine-jre

# 设置docker容器内的工作目录
WORKDIR /app

# 将已经生成的 JAR 文件复制到容器中,这里注意 sxkc_api-1.0.0.jar 的路径
COPY sxkc_api-1.0.0.jar ./app.jar

# 设置时区环境变量
ENV TZ=Asia/Shanghai

# 暴露端口
EXPOSE 8081

# 启动命令
ENTRYPOINT [ "java", "-jar", "app.jar" ]

使用 源码 构建,新建 Dockerfile 文件,放入如下内容

# 第一阶段:构建阶段(使用 Maven 构建)
FROM maven:3.8.4-openjdk-11 AS build

# 设置工作目录
WORKDIR /app

# 将项目的 pom.xml 和源代码复制到容器中
COPY pom.xml .
COPY src ./src

# 使用 Maven 构建项目
RUN mvn clean package -DskipTests

# 第二阶段:生产阶段(使用轻量化的 JRE 运行)
FROM adoptopenjdk/openjdk11:alpine-jre

# 设置工作目录
WORKDIR /app

# 从第一阶段复制生成的 JAR 文件到生产镜像中
COPY --from=build /app/target/sxkc_api-1.0.0.jar ./app.jar

# 设置时区环境变量
ENV TZ=Asia/Shanghai

# 暴露端口
EXPOSE 8081

# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]

运行docker 构建命令,进行镜像的构建

# 构建镜像
docker build -t df-maptool:20250401 .
# 查看镜像,构建完成后即可看到  df-maptool:20250401
docker images


# 运行容器
docker run -d --name df-maptool -p 8081:8081 df-maptool:20250401
# 查看容器
dockcer ps -a
# 进入容器
docker exec -it 容器id  sh 


# 导出镜像
docker save -o ../df-maptool.20250401.tar df-maptool:20250401
# 导入镜像
docker load -i ../df-maptool.20250401.tar

替换镜像中的文件

1.运行容器

docker run -d -p 8084:80 --restart=always  --name  fronted  fronted:082123

2.替换文件

# 使用 docker cp 复制文件到容器
# docker cp myfile.txt mycontainer:/root/myfile.txt

# copy整个 mydir 目录到 /root/ 下, 注意这里copy的是整个mydir目录,包含目录本身
# docker cp mydir mycontainer:/root/
docker cp dist fronted:/home/data/fronted/

# 退出容器但不停止
exit

3.重新生成新的镜像

# 提交更改,创建新镜像
# fronted 为容器名称  fronted-new 为新的镜像名称   version为版本号,不指定默认为 latest
docker commit fronted fronted-new:version

或

导出容器为镜像
docker export 容器id > nginx.tar

常见问题

1.docker 中 vim 命令 无法执行,在容器中执行如下代码安装
apt-get update下源库
apt-get install vim 命令

Index