文章详情

docker的深度配置和应用

之前可供参考的文章

在csdn里写过相关的配置文章,可以查看:

docker的基础配置与应用

使用docker compose文件创建不同操作系统

dockerfile方式创建docker容器

如果是博客这样的网站应用,可以用dockerfile直接制作镜像(相关操作比较少且简单)。例如,创建网站docker镜像可以先构建jar包

./mvnw clean package

然后写一个如下的dockerfile:

# 使用官方轻量 JDK 镜像
FROM openjdk:17-jdk-alpine

# 创建工作目录
WORKDIR /app

# 复制 jar 文件
COPY target/demo-0.0.1-SNAPSHOT.jar app.jar

# 默认执行命令
ENTRYPOINT ["java", "-jar", "app.jar"]

最后用docker build构建docker镜像环境,docker run运行

sudo docker build -t my_website .   //对文件夹里的所有文件完成docker镜像构建,my_website是构建镜像的名字
docker run -d -p 8080:8080 --name java_web my_website

如果是ubuntu desktop这种操作系统镜像,则麻烦很多,需要先创建dockerfile

# Use an official Ubuntu runtime as a parent image
FROM ubuntu:latest

# Install desktop environment and VNC server
RUN apt-get update && apt-get install -y \
    ubuntu-desktop \
    x11vnc \
    xfce4 \
    supervisor \
    && rm -rf /var/lib/apt/lists/*

# Set environment variables
ENV VNC_PW 123456
ENV DISK_SIZE "50G"
ENV RAM_SIZE "4G"
ENV CPU_CORES "4"

# Configure VNC server
RUN mkdir -p /root/.vnc
RUN x11vnc -storepasswd $VNC_PW /root/.vnc/passwd

# Configure supervisor to start VNC server
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf

# Expose VNC port
EXPOSE 6080

# Start supervisor
CMD ["/usr/bin/supervisord"]

除此之外,也需要提供可用的supervisord.conf文件,我这里没有可用的conf文件,发现构建镜像是不报错的,但是docker run运行容器发现容器刚开启就关闭了,这个地方要多注意。

用docker build构建docker镜像环境,docker run运行

sudo docker build -t my_ubuntu .   //给构建的镜像命名为 my_ubuntu,最好还是有名称
sudo docker build . //但也可以直接构建,这样只有id,需要后续为镜像命名
docker run --name ubuntu2 my_ubuntu //构建容器并命名

docker compose方式创建docker容器

相比之下,docker compose更适合构建系统镜像 如果要构建ubuntu desktop,只需要

version: "3"
services:
  ubuntu:
    image: colinchang/ubuntu-desktop
    container_name: ubuntu_desktop
    shm_size: 1g
    ports:
      - "127.0.0.1:6901:6901"
    environment:
      RAM_SIZE: 4G
      CPU_CORES: 2
      DISK_SIZE: 80G
      VNC_PW: 123456
    user: root
    restart: always

然后运行

sudo docker compose -f docker-compose-linux.yml up

但是这种方式属于下载别人已经构建好的镜像,安装到自己的容器内运行。你会发现用户名无法被改变,一直是kasm_user,即使加入VNC_USER也无济于事。实际用下来,开机也会同时打开ubuntu容器,不用的时候需要docker stop手动关闭。 所以如果对自己的镜像有要求,希望能比较全面的自定义镜像,可以用dockerfile,先构建后运行。 就需求而言,如果只是想在系统镜像里运行一些底层系统里没有,或者很难运行的程序或软件,(比如说ROS2,对ubuntu的适配很好,对其他的linux系统适配很差),则完全没必要使用dockerfile,直接docker compose就好了。

docker compose方式创建多个win容器

要构建win镜像,肯定首选docker compose,构建单个windows系统的话只需要一个docker-compose-win文件,对很多端口什么的也不需要加以区分,但是如果创建多个win镜像,则需要防止新的win容器覆盖旧的win容器,所需要注意的内容就变得很多。

docker-compose-win文件:

version: "3"
services:
  windows:
    image: dockurr/windows
    container_name: windows
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    stop_grace_period: 2m
    restart: on-failure
    environment:
      VERSION: win10
      RAM_SIZE: 20G
      CPU_CORES: 4
      DISK_SIZE: 100G

docker-compose-winagain文件:

version: "3"
services:
  windows-harmony:                #服务名称要改
    image: dockurr/windows
    container_name: windows_again  #容器名称要改
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 5800:8006       #端口固定是8006,可以代理端口到5800,和第一个docker win镜像加以区分
      - 3387:3387/tcp   #这俩端口也改
      - 3387:3387/udp
    stop_grace_period: 2m
    restart: on-failure
    environment:
      VERSION: win10
      RAM_SIZE: 16G
      CPU_CORES: 4
      DISK_SIZE: 100G

最后可以通过

docker image ls
docker ps -a

看一下目前电脑上已有的docker镜像和docker容器: 图片描述
可以发现,有一个镜像是未命名状态,这是上午运行sudo docker build .形成的ubuntu-desktop镜像。运行docker tag命令完成对此镜像的命名:

docker tag 镜像id REPOSITORY:TAG

图片描述
如果要删除容器和镜像,可以:

sudo docker image rm 镜像id
sudo docker rm 容器id

Turnin

永远在学习的路上
Author

欢迎参观我的CSDN博客:技术博客
我的github: 开源平台
想要联系请发邮箱: lhyx999888@outlook.com