企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
>[info] docker 基础使用(帮助命令) Nginx仓库: [https://hub.docker.com/_/nginx/](https://hub.docker.com/_/nginx/) PHP仓库: [https://hub.docker.com/_/php/](https://hub.docker.com/_/php/) MySQL仓库: [https://hub.docker.com/_/mysql/](https://hub.docker.com/_/mysql/) 容器内安装命令: ``` # 更新apt-get apt-get update # 安装vim apt-get install -y vim ``` ``` # 查看docker版本 docer version # 查看docker信息(包括镜像和容器数量) docker info # 查看docker (CPU/内存使用状态) docker stats # 帮助命令 docker --help ``` >[info] docker 基础使用(镜像命令) * **查看所有镜像:** ``` docker images # 解释 REPOSITORY 镜像的仓库源 TAG 镜像的标签 IMAGE ID 镜像的id CREATED 镜像创建时间 SIZE 镜像的大小 ``` * **搜索镜像:** ``` docker search redis ``` * **拉取镜像:** ``` # 默认最新 docker pull nginx docker pull nginx:1.19.1 ``` * **删除镜像:** ``` 1. 指定删除(-f 强制删除)(需要先停止容器 并 删除容器) docker rmi (image id)或 image name:tag 2. 删除所有 docker rmi $(docker images -q) ``` * **镜像历史:** ``` docker history 镜像id ``` * **镜像版本:** ``` docker tag 镜像id 镜像名:[tag] 例: docker tag dd6675b5cfea wangqianshun:mysql:1.0 ``` * **镜像网络:** ``` docker network --help 例: docker network inspect 镜像id ``` >[info] docker 基础使用(容器命令) * **启动/运行:** ``` docker run -itd --name 容器名称(自定义) 镜像名称:标识 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] ``` * **启动options说明:** (帮助命令:`docker run --help`) ``` -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; -d: 后台运行容器,并返回容器ID; -i: 以交互模式运行容器,通常与 -t 同时使用; -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; --name="nginx-lb": 为容器指定一个名称; --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致; --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致; -h "mars": 指定容器的hostname; -e username="ritchie": 设置环境变量; --env-file=[]: 从指定文件读入环境变量; --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行; -m :设置容器使用内存最大值; --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; --link=[]: 添加链接到另一个容器; --expose=[]: 开放一个端口或一组端口; --volume , -v:绑定一个卷 -P: 随机端口映射,容器内部端口随机映射到主机的端口 -p:指定端口映射,格式为:主机(宿主)端口:容器端口 ``` * **示例:** ``` # 运行 nginx 返回完整容器id docker run -itd --name my-nginx -p 80:80 b692a91e4e15 docker run --name nginx-test -p 80:80 -d nginx ``` ![](https://img.kancloud.cn/8f/db/8fdbee84341b47db68beac97f7257179_665x60.png) ![](https://img.kancloud.cn/ab/c9/abc9782fbaf828626bbfe0e35fe4793f_1149x398.png) ``` # 创建一个带卷的容器(-v 目录不存在自动创建,并且两个目录互通共享) docker run -itd --name my-nginx -v /test/data:/data b692a91e4e15 ``` ![](https://img.kancloud.cn/53/17/53173e8f022fe0ef95dbee72bd127e27_1037x126.png) ![](https://img.kancloud.cn/21/51/2151c3a24bcdcb35a7492eecf72f8dd9_1077x380.png) * **列出运行的容器:** ``` # 列出当前正在运行的容器 docker ps # 列出当前正在运行的容器 + 历史运行过的容器 docker ps -a # 只显示容器的id docker ps -q ``` * **删除容器:** ``` # 删除容器 docker rm 容器id # 删除全部容器(先停止再删除) docker rm $(docker ps -aq) # 强制删除全部容器 docker rm -f $(docker ps -aq) ``` * **停止/启动/重启容器:** ``` # 停止 docker stop 容器id docker kill 容器id # 启动 docker start 容器id # 重启 docker restart 容器id ``` >[info] docker 基础使用(常用命令其他) * **查看容器日志:** ``` docker logs [OPTIONS] 容器id ``` `options`说明: ``` --details:显示更多的信息 -f:实时跟踪日志输出 --since:显示某个开始时间的所有日志 -t:显示时间戳 --tail:仅列出最新N条容器日志,默认是all --until:显示自某个timestamp之前的日志 ``` ``` # 实时查看容器my-nginx的日志输出(my-nginx为创建时取的名称) docker logs -f my-nginx ``` ![](https://img.kancloud.cn/07/d1/07d183201f5c0b8f6b2144dd1497288b_888x493.png) * **查看容器进程:** ``` docker top 容器id ``` ![](https://img.kancloud.cn/7a/7c/7a7c114194f3d514b404b79974ba86ae_969x273.png) * **查看镜像的元数据:** ``` docker inspect 镜像id ``` ![](https://img.kancloud.cn/2a/02/2a02d3b1bea39d81a3d84bd6528d85a4_837x600.png) >[info] docker 进入容器中的系统 * **进入正在运行的容器:** ``` docker exec [OPTIONS] CONTAINER COMMAND [ARG...] docker exec -it 容器id /bin/sh docker exec -it my-nginx /bin/sh ``` `options` 说明: ``` -d :分离模式: 在后台运行 -i :即使没有附加也保持STDIN 打开 -t :分配一个伪终端 docker exec -it 容器id bash docker exec -it 容器名称 bash 以交互式终端方式进入容器,并执行了 bash 命令,也就是获得一个可操作的Shell ``` >[info] docker 容器与宿主机文件复制 * **把容器内部的资源复制到宿主机上:** ``` # 命令: docker cp 容器id:容器内资源路径 宿主机目录路径 # 例子: docker cp my-nginx:/docker-entrypoint.sh test.sh ``` ![](https://img.kancloud.cn/39/f5/39f5c8404fe4a1035271fe2ca7120933_668x84.png) * **把容宿主机上的资源复制到容器内部:** ``` # 命: docker cp 文件|目录 容器id:容器路径 # 例子: docker cp /root/test.txt 427199e3b5ec:/test.txt ``` ![](https://img.kancloud.cn/9d/f3/9df3c2be3d6da50907bf48a816709b04_697x69.png) >[info] docker 镜像与容器的迁移处理 **1. 镜像:save 与 load** ![](https://img.kancloud.cn/a5/4d/a54d4b0823bb2e4911846b602f3a2d07_542x92.png) 1.1 save 打包(将指定镜像保存成 tar 归档文件) ``` docker save [OPTIONS] IMAGE [IMAGE...] options说明: -o :输出到的文件。 ``` 1.1.1 将本地镜像导出 ``` # 导入的时候 名称 和 tag 为 none docker save -o nginx.tar b692a91e4e15 # 直接命名 docker save 镜像名称:Tag -o 文件名 # 用 下面这两种导出 导入的时候 名称和tag 不会变 docker save nginx > nginx.tar docker save nginx | gzip > nginx-latest.tar.gz ``` ![](https://img.kancloud.cn/ad/6c/ad6c5fc45f91918d07c9228dfba63a27_582x82.png) 1.1.2 删除 nginx 镜像进行`load`测试(有映射需先停止) ``` docker rmi -f b692a91e4e15 ``` ![](https://img.kancloud.cn/79/bf/79bfe25ecdec30b38cf6b44a4e48a17b_826x388.png) 1.2 load 加载本地镜像 ``` docker load -i nginx.tar 或 docker load < nginx.tar ``` ![](https://img.kancloud.cn/aa/e8/aae892eeb5b7b3972c81a12f9f2b0db2_900x229.png) 1.3 修改镜像名称 和 tag(其他save方式可不需要这一步) ``` # 命令示例: docker tag 镜像id 镜像名称:tag # 例子: docker tag b692a91e4e15 nginx:v1 ``` ![](https://img.kancloud.cn/c0/b8/c0b8f96c9ca2095cc6a60d1af8edc26f_639x192.png) ***** **2. 容器:export 与 import** docker的流行与它对容器的易分享和易移植密不可分。用户不仅可以把容器提交到公共服务器上,还可 以将容器导出到本地文件系统中。 同样我们也可以讲导出的 容器重新导入到docker运行环境中。docker的导入和导出分别由import命令 和export命令完成。 ``` docker run -itd --name my-nginx b692a91e4e15 ``` ![](https://img.kancloud.cn/7b/fe/7bfe00d733a85ddd24b03d08173aebdd_1001x121.png) 2.1 export 导出 ``` docker export my-nginx > my-nginx.tar ``` ![](https://img.kancloud.cn/e3/73/e373d336ad079b0471114080cccc6a9a_960x129.png) 2.2 import 导入 ``` docker import my-nginx.tar my-nginx:v1 ``` ![](https://img.kancloud.cn/de/fa/defacd451bacd531531c5da6f2b7df57_1029x123.png) 2.3 接下来我们通过docker run构建容器 ``` # 将import导入的镜像构建容器 # docker run -itd --name my-nginx my-nginx:v1 docker run -itd --name my-nginx 45406464f6e3 docker run -itd --name my-nginx 45406464f6e3 sh ``` **报错:** docker: Error response from daemon: No command specified. See 'docker run --help'. `第一次运行报错是因为docker的bug, 因为没有一个前台进程在运行 而加上 bash,sh等命令 就是跟docker一个挂起在前台的界面` ![](https://img.kancloud.cn/ad/7c/ad7cf1bda49d310e7c8abf06cff65c80_931x364.png) **3. 两者对比** 相对于文件大小来说,save方式导出的文件比export方式导出的文件大,正是因为save方式保存了镜像 的历史和层(layer),使其可以层回滚,即回滚到之前的历史层,所以save方式导出的文件稍微大一些反 观export方式,在导出过程中丢失所有的历史,导致其不可以层回滚,导出的文件会小 一些可以通过 docker history 镜像名 看到层关系。 ``` docker history 45406464f6e3 ``` ![](https://img.kancloud.cn/ff/de/ffde16d10ca6b96ec178d546240e28e4_923x504.png)