docker 常用命令
list:
docker images,rmi:
docker rmi <image_id>pull:
docker pull <image_name>ordocker pull --platform=xxxx <image_name>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-failure、always、unless-stopped(手动停止的就不会重启)
volume:挂载
docker create my_valume,再使用docker run -v my_valume:/data挂载到容器中,容器会自动创建该目录,并挂载到宿主机上。第一次运行时会自动创建,并将容器内的数据保存到宿主机上。docker vlolume inspect my_valume查看挂载信息docker volume list查看已创建docker volumedocker volume rm my_valume删除docker volumedocker volume prune -a删除所有未被使用过的docker volume
inspect:
docker inspect <container_name>查看容器信息,如果不知道什么意思可以直接喂给AIstop:
docker stop <container_name>停止容器,通过stop命令停止容器,其配置(如:端口映射、挂载目录等)依然存在,可以用start命令启动。start:
docker start <container_name>启动容器,create:
docker create <image_name>创建一个容器,但不启动,可以用docker start命令启动。logs:
docker logs <container_name>查看容器日志,-f参数可以实时查看日志。exec: 在容器内部执行Linux命令,
docker exec -it <container_name> /bin/bash进入容器,-it参数可以进入交互模式。docker exec <container_name> <command>执行命令,如docker exec <container_name> ls查看当前目录下的文件。
Dockerfile:
docker build -t <image_name> .构建镜像,-t参数指定镜像名。FROM指定基础镜像RUN执行命令COPY复制文件WORKDIR设置工作目录ENTRYPOINT容器启动命令,比CMD优先级更高CMD设置容器启动命令EXPOSE暴露端口ENV设置环境变量VOLUME挂载目录USER设置用户ONBUILD触发指令LABEL标签
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网络中。
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
None模式:不联网模式
docker-compose:
-docker-compose up -d,启动所有容器
-docker-compose down,停止所有容器
-docker-compose ps,查看容器状态
带桌面的Docker容器(ubuntu-server版本安装vnc远程桌面 xfce实现)
创建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"]创建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
