Wangjili
文章61
标签12
分类9
docker2

docker2

docker 常用命令

  1. list:docker images,

  2. rmi: docker rmi <image_id>

  3. pull: docker pull <image_name> or docker pull --platform=xxxx <image_name>

  4. run: 命令较多:

    • docker run -d <image_name>
    • docker run <image_name>
    • docker run -it <image_name> 进入容器
    • docker run -it --rm <image_name> 进入容器,退出容器后自动删除容器
    • docker run -p 80:80 <image_name> 映射端口:宿主机端口:容器端口
    • docker run -v /home/user/data:/data <image_name> 挂载目录:宿主机目录:容器目录,需要宿主机目录存在
    • docker run -w /app <image_name> 工作目录
    • docker run -e MY_ENV=my_value <image_name> 设置环境变量,具体有哪些环境变量,可以在镜像说明中查看
    • docker run --name my-container <image_name> 给容器命名
    • docker run -d --restart always <image_name> 容器停止时自动重启,--restart参数可选值:no(默认)、on-failurealwaysunless-stopped(手动停止的就不会重启)
  5. volume:挂载

    • docker create my_valume,再使用docker run -v my_valume:/data挂载到容器中,容器会自动创建该目录,并挂载到宿主机上。第一次运行时会自动创建,并将容器内的数据保存到宿主机上。
    • docker vlolume inspect my_valume查看挂载信息
    • docker volume list 查看已创建docker volume
    • docker volume rm my_valume 删除docker volume
    • docker volume prune -a 删除所有未被使用过的docker volume
  6. inspect: docker inspect <container_name> 查看容器信息,如果不知道什么意思可以直接喂给AI

  7. stop: docker stop <container_name> 停止容器,通过stop命令停止容器,其配置(如:端口映射、挂载目录等)依然存在,可以用start命令启动。

  8. start: docker start <container_name> 启动容器,

  9. create: docker create <image_name> 创建一个容器,但不启动,可以用docker start命令启动。

  10. logs: docker logs <container_name> 查看容器日志,-f参数可以实时查看日志。

  11. exec: 在容器内部执行Linux命令,

    • docker exec -it <container_name> /bin/bash 进入容器,-it参数可以进入交互模式。
    • docker exec <container_name> <command> 执行命令,如docker exec <container_name> ls查看当前目录下的文件。
  12. Dockerfile: docker build -t <image_name> . 构建镜像,-t参数指定镜像名。

    • FROM 指定基础镜像

    • RUN 执行命令

    • COPY 复制文件

    • WORKDIR 设置工作目录

    • ENTRYPOINT 容器启动命令,比CMD优先级更高

    • CMD 设置容器启动命令

    • EXPOSE 暴露端口

    • ENV 设置环境变量

    • VOLUME 挂载目录

    • USER 设置用户

    • ONBUILD 触发指令

    • LABEL 标签

  13. network: 创建容器子网。

    • docker network list 查看网络,
    • docker network create <network_name>创建网络,
    • docker network connect连接网络,
    • docker network disconnect断开网络。
    • docker run --network <network_name> <image_name> ...将容器加入到网络中。以mongodb为例,docker run -d --name my_mongodb_express -p 8081:8081 -e ME_CONFIG_MONGODB_SERVER=my_mongodb --network network1 mongo-express,其中network1是之前创建的网络名,my_mongodb是之前启动的mongodb容器名,并且已加入到network1网络中。
  14. Host模式:Docker容器直接共享宿主机的网络,容器直接使用宿主机的IP地址,而且无需-p参数进行端口映射,容器内的服务直接运行在宿主机的端口上,通过宿主机的IP和端口就能访问到容器内的服务,可以解决一些非常棘手的网络问题

    • docker run -d --name my_host_container --network host <image_name>,其中--network host参数将容器加入到宿主机的网络中。
    • docker exec -it my_host_container /bin/bash,进入容器,执行ifconfig命令,可以看到容器的IP地址和宿主机的IP地址是一样的。可以进入容器,安装一个iproute2
  15. None模式:不联网模式

  16. docker-compose:
    -docker-compose up -d,启动所有容器
    -docker-compose down,停止所有容器
    -docker-compose ps,查看容器状态

带桌面的Docker容器(ubuntu-server版本安装vnc远程桌面 xfce实现)

  1. 创建Dockerfile文件,内容如下:

    # 基础镜像
    FROM docker.xuanyuan.me/library/ubuntu:22.04
     
    ENV DEBIAN_FRONTEND=noninteractive
     
    # 安装基本组件
    RUN apt-get update && apt-get install -y \
        xfce4 xfce4-goodies x11vnc xvfb \
        firefox wget curl net-tools sudo git \
        python3 python3-pip supervisor \
        && apt-get clean && rm -rf /var/lib/apt/lists/*
     
    # 创建用户
    RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo
     
    # 设置默认分辨率
    ENV DISPLAY=:1
    ENV RESOLUTION=1280x800
    
    WORKDIR /app
    COPY . .
    
    # 我是将noVNC和websockify先下载到本地,然后再复制到镜像/opt目录下,方便管理
    RUN mv /app/noVNC /opt/noVNC && \
        mv /app/websockify /opt/websockify \
        && chmod +x /opt/websockify/run \
        && ln -s /opt/noVNC/vnc_lite.html /opt/noVNC/index.html
    
    # 下载 noVNC 和 websockify(源码)
    # WORKDIR /opt
    # RUN git clone https://github.com/novnc/noVNC /opt/noVNC \
    #     && git clone https://github.com/novnc/websockify /opt/websockify \
    #     && chmod +x /opt/websockify/run \
    #     && ln -s /opt/noVNC/vnc_lite.html /opt/noVNC/index.html
     
     
    # 设置 VNC 密码
    RUN mkdir -p /home/docker/.vnc \
        && x11vnc -storepasswd 123456 /home/docker/.vnc/passwd
     
    # 复制 supervisord 配置文件
    COPY supervisord.conf /etc/supervisor/conf.d/vnc.conf
     
    WORKDIR /home/docker
     
    EXPOSE 6080
     
    CMD ["/usr/bin/supervisord", "-n"]
  2. 创建supervisord.conf文件,内容如下:passwd 根据实际情况修改密码

    [program:xvfb]
    command=/usr/bin/Xvfb :1 -screen 0 1280x800x24
    autostart=true
    autorestart=true
     
    [program:x11vnc]
    command=/usr/bin/x11vnc -display :1 -passwd 123456 -forever -shared
    autostart=true
    autorestart=true
     
    [program:startxfce4]
    command=/usr/bin/startxfce4
    environment=DISPLAY=":1"
    autostart=true
    autorestart=true
     
    [program:novnc]
    command=/opt/websockify/run 0.0.0.0:6080 localhost:5900 --web=/opt/noVNC
    autostart=true
    autorestart=true
本文作者:Wangjili
本文链接:https://blog.wangjili.cn/2025/11/13/docker2/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可