Docker的常用命令 帮助命令 1 2 3 docker version #查看版本信息 docker info #显示dockers的系统信息 docker 命令 --help #万能命令,帮助命令
镜像命令 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1.docker images #查看本机上的镜像 # 可选项 -a, --all #列出所有镜像 -q, --quiet #只显示镜像的id -aq #显示所有镜像的id 2.docker search #搜索镜像 # 可选项 --filter=STARS=3000 #搜索出来的镜像的STARS大于3000 3.docker pull #下载镜像 # 下载镜像:docker pull 镜像名 [:tag] 4.docker rmi #删除镜像 docker rmi -f 容器id #删除指定镜像 docker rmi -f 容器id 容器id 容器id #删除多个镜像 docker rmi -f $(docker images -aq) #删除多个镜像
容器命令 说明:有了镜像才能创建容器
1 docker pull quay.io/centos/centos:stream9
新建容器并启动
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 docker run [可选参数] image # 参数说明 --name='Name' 容器名字,用来区分容器 -d 后台方式运行 -it 使用交互方式运行,进入容器查看内容 -p 指定容器的端口 -p 8080:8080 -p ip:主机端口:容器端口 -p 主机端口:容器端口 (常用) -p 容器端口 容器端口 -p 随机指定端口 如:docker run -it quay.io/centos/centos:stream9 /bin/bash exit #从容器中退回主机
列出所有运行的容器
1 2 3 4 docker ps 命令 #列出当前正在运行的容器 -a #列出当前正运行的容器,举出历史运行过的容器 -n=? #显示最近创建的容器 ?即个数 -q #只显示容器的编号
退出容器
1 2 exit #直接容器停止并退出 Ctrl + P + Q #容器不停止退出
删除容器
1 2 3 docker rm 容器id #删除指定的容器,不能删除正在运行的容器 docker rm -f $(docker ps -aq) #删除所有的容器 docker ps -a -qixargs docker rm #删除所有的容器
启动和停止容器的操作
1 2 3 4 docker start 容器id #启动容器 docker restart 容器id #重启容器 docker stop 容器id #停止当前正在运行的容器 docker kill 容器id #强制停止当前容器
常用其他命令 后台启动容器
1 2 3 4 docker run -d 镜像名 # docker run -d quay.io/centos/centos:stream9 # 问题docker ps ,发现quay.io/centos/centos:stream9停止了 # 常见的坑:docker 容器使用后台运行,就必须要有一个前台进程,docker发现没有前台应用,就会停止
查看日志
1 2 3 docker logs -f -t -n --tail 容器 --tf 显示日志 --tf number 显示日志条数
查看容器中进程信息ps
1 2 docker top 容器id # docker top 9db0d14241d1
查看镜像的元数据
1 2 docker inspect 容器id # docker inspect 9db0d14241d1
进入当前正在运行的容器
1 2 3 4 5 6 7 8 9 10 11 # 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置 # 方式一 docker exec -it 容器id bashShell # docker exec -it 9db0d14241d1 /bin/bash # 方式二 docker attach 容器id # docker attach 9db0d14241d1 # docker exec # docker attach
从容器内拷贝文件到主机上
1 2 3 4 5 6 7 8 9 10 docker cp 容器id:容器内路径 目的的主机路径 # docker cp 26b13cfc9e26:/home/text.java /mnt/c/Users/13343/Desktop # 把容器内的文件拷贝到windows桌面上 bash-5.1# cd /home bash-5.1# touch text.java bash-5.1# ls /home text.java docker cp 26b13cfc9e26:/home/text.java /mnt/c/Users/13343/Desktop Successfully copied 1.54kB to /mnt/c/Users/13343/Desktop
查看cpu状态
查看镜像[构建历史/分层记录]
1 2 docker history 容器id/镜像名 # docker history mydockerfile
实战 部署nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 # 拉取nginx镜像 docker pull nginx # 运行镜像 docker run -d --name nginx01 -p 3344:80 nginx #3344为主机端口(可修改),80为nginx默认端口(不可修改) # 本机自测 curl localhost:3344 <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> html { color-scheme: light dark; } body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, nginx is successfully installed and working. Further configuration is required for the web server, reverse proxy, API gateway, load balancer, content cache, or other features.</p> <p>For online documentation and support please refer to <a href="https://nginx.org/">nginx.org</a>.<br/> To engage with the community please visit <a href="https://community.nginx.org/">community.nginx.org</a>.<br/> For enterprise grade support, professional services, additional security features and capabilities please refer to <a href="https://f5.com/nginx">f5.com/nginx</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html> # 网络访问 http://localhost:3344/ #网页能正常打开说明部署成功
Commit镜像 1 2 3 4 5 6 docker commit [选项] <容器ID/容器名> <新镜像名>:<标签> 可选项 -a:指定作者(如 `-a "Your Name"`) -m:提交说明(类似 Git,如 `-m "安装了 Nginx"`) -p:提交时暂停容器(默认 `true`,防数据损坏) -c:附带 Dockerfile 指令(如 `-c "EXPOSE 80"`)
容器数据卷 使用数据卷 直接使用命令来挂载 -v
1 2 3 4 5 docker run -it -v ~/text:/data quay.io/centos/centos:stream9 /bin/bash # 在wsl中创建文件夹text,挂载到容器中data文件 注:在wsl中的文件挂载要加~ # 此时无论在哪个文件夹中新建文件,都会同步到另一个文件夹中 # 启动时可通过docker inspect 容器id 来查看是否挂载成功,(看mount)
DockerFile DockerFile的基础知识 DockerFile:构建文件,定义了一切的步骤,源代码
DockerImages:通过 DockerFile 构建生成的镜像,最终发布和运行的产品
Docker容器:容器就是镜像运行起来提供服务的,即实例
基础知识:
1.每个保留关键字(指令)都必须是大写字母
2.指令从上到下顺序执行
3.#表示注释
4.每一个指令都会创建提交一个新的镜像层
DockerFile的指令 1 2 3 4 5 6 7 8 9 10 11 12 FROM # 基础镜像,一切从这开始构建 MAINTAINER # 镜像是谁写的,姓名+邮箱 RUN # 镜像构建的时候需要运行的命令 ADD # 步骤,添加内容,如压缩包,会自动解压 WORKDIR # 镜像的目录 VOLUME # 挂载的目录 EXPOSE # 暴露端口配置 CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代 ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 ONBULID # 当构建一个被继承的DockerFile,这个时候就会运行ONBUILD的指令。触发指令 COPY # 类似ADD,将文件拷贝到镜像中,不会自动解压 ENV # 构建的时候设置环境变量
实战 1.创建自己的centos
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # 1.编写dockerfile文件 FROM quay.io/centos/centos:stream9 #官方基础镜像 MAINTAINER yyg<1334327962@qq.com> #作者及邮箱 ENV MYPATH /usr/local #设置环境变量 WORKDIR $MYPATH RUN yum -y install vim #安装vim,net-tools RUN yum -y install net-tools EXPOSE 80 #声明端口 CMD echo $MYPATH #容器启动命令 CMD echo "---end---" CMD /bin/bash # 2.通过这个文件构建镜像 # 命令 docker build -f dockerfile文件路径 -t 镜像名:[tag] docker build -f mydockerfile -t mycentos:0.1 . # 3.测试运行
对比之前的原生centos
新增了:自动进入工作目录,不再是根目录,新添vim,ifconfig等功能
2.自制一个dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 FROM python:3.11-alpine # 安装flask RUN pip install flask --no-cache-dir # 跳转的网站列表,支持多个网站 CMD ["python3", "-c", "\ from flask import Flask, redirect\n\ import random\n\ app = Flask(__name__)\n\ \n\ websites = [\n\ # 网站地址 'https://www.crazygames.com/game/jet-rush',\n\ 'https://www.crazygames.com/game/space-waves',\n\ 'https://www.crazygames.com/game/space-waves',\n\ 'https://www.crazygames.com/game/doodle-road',\n\ 'https://whatgamesplay.com/zh/snake-game'\n\ ]\n\ \n\ @app.route('/')\n\ def jump():\n\ # 每次访问,随机跳转到列表里的一个网站 return redirect(random.choice(websites))\n\ \n\ app.run(host='0.0.0.0', port=80)\n\ "] EXPOSE 80
效果:运行后每次访问 http://localhost:8080 随机跳转一个小游戏
Docker网络 docker0 Docker使用的时liunx桥接,宿主机中是一个docker容器的网桥 docker0
容器删除,对应的网桥就消失了
自定义网络 1.查看docker网络
网络模式
bridge :桥接 docker (默认)
none :不配置网络
host:和宿主机共享网络
2.创建自定义网络
1 2 # 创建一个自定义网络 docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet