1.docker常用命令docker常用命令dockerpull 镜像拉取镜像images查看已下载镜像rmi删除镜像run-d后台运行--name指定名称-p端口映射主机端口:容器端口-e配置环境变量-v挂载数据卷--network配置网络--memory资源限制--cpus--restartalways 总是重启unless-stopped 除非手动停止on-failure:重启次数-it进入容器分配一个终端exec -it进入运行中的容器ps查看正在运行的容器ps -a查看所有容器start启动容器stop停止容器restart重启容器rm删除容器1.1拉取镜像[rootdocker_server ~]# docker pull redis1.2创建并启动容器最常见启动容器[rootdocker_server ~]# docker run -d --name redis1 -p 6379:6379 redis 还可以加--restart always表示总是启动即启动docker就启动该容器最常见启动容器[rootdocker_server ~]# docker run -it --name nginx1 nginx /bin/bash -it进入容器并分配一个终端 容器名 镜像 解释器 --name给容器起名nginx1 /bin/bash解释器1.3查看容器[rootdocker_server ~]# docker ps -a1.4进入容器[rootdocker_server ~]# docker exec -it redis1 /bin/bash1.5退出容器ctrlpq1.6停止启动容器[rootdocker_server ~]# docker stop redis1[rootdocker_server ~]# docker stop docker ps -q -关闭所有容器[rootdocker_server ~]# docker start redis11.7查看镜像[rootdocker_server ~]# docker images1.8删除所有镜像[rootdocker_server ~]# docker rmi docker images -p -p显示所有镜像ID1.9删除所有容器[rootdocker_server ~]# docker rm docker ps -a -q[rootdocker_server ~]# docker rm docker ps -qf statusexited -f表示过滤-q表示显示ID号 删除所有statusexited的容器1.10查看镜像制作过程[rootdocker_server ~]# docker history nginx:latest -查看nginx:latest制作过程1.11显示正在运行的容器显示所有容器[rootdocker_server ~]# docker ps -显示正在运行的容器[rootdocker_server ~]# docker ps -a -显示所有容器1.12容器重命名镜像重命名[rootdocker_server ~]# docker rename 旧名 新名 -容器重命名[rootdocker-server ~]# docker tag 旧名:tag 新名:tag -tag是版本号镜像重命名 -保留原镜像1.13显示容器资源消耗情况实时流[rootdocker_server ~]# docker stats1.14实时显示容器日志开两个终端看效果[rootdocker_server ~]# docker logs -f 容器名1.15显示容器退出码开两个终端看效果[rootdocker_server ~]# docker wait 容器名 显示0表示正常退出1.16显示容器的运行进程[rootdocker_server ~]# docker top1.17显示容器底层信息[rootdocker_server ~]# docker inspect 容器名 如果是nginx的话可以在最后看到它的IP地址 IPAddress: 172.17.0.21.18在终端发送HTTP请求-curl[rootdocker_server ~]# curl -I http://172.17.0.2 -I表示显示头部信息 [rootdocker_server ~]# curl http://172.17.0.2 -访问该Ip1.19宿主机容器拷贝文件/目录[rootdocker_server ~]# docker cp -a 发送绝对路径 接收绝对路径 -a表示传目录 ps: [rootdocker_server ~]# docker cp -a /root/dir1 nginx2:/ -宿主机--容器 [rootdocker_server ~]# docker cp -a nginx2:/dir1 /root/dir2 -容器--宿主机1.20容器迁移容器运行时也可以1.20.1将容器打成包迁移1.20.1.1容器打包到宿主机[rootdocker-server ~]# docker export -o 绝对路径/文件名.tar 容器名 ps: [rootdocker-server ~]# docker export -o /root/nginx.tar nginx1 将nginx1容器打包到宿主机/root/下叫nginx.tar1.20.1.2通过scp命令迁移到其他主机[rootdocker-server ~]# scp -r 文件 IP地址:绝对路径 -r传目录 ps: [rootdocker-server ~]# scp nginx.tar 192.168.189.131:/root/ 将nginx.tar传到IP地址为192.168.189.131主机的/root/目录下1.20.1.3其他主机使用[rootdocker_server ~]# docker import docker文件.tar 新镜像名 使用命令后出来的是一个镜像 ps: [rootdocker_server ~]# docker import nginx.tar nginx:latest 将nginx.tar制作为镜像叫nginx:latest1.20.2将容器提交为镜像迁移1.20.2.1容器提交为镜像[rootdocker_server ~]# docker commit 容器名 镜像名:版本号 ps: [rootdocker_server ~]# docker commit nginx1 nginx-test:latest 将容器nginx1提交为镜像1.20.2.2将镜像打包为.tar到主机[rootdocker_server ~]# docker save -o 镜像文件.tar 镜像名:版本号 ps: [rootdocker_server ~]# docker save -o nginx-test.tar nginx-test:latest 将nginx-test:latest镜像打包叫nginx-test.tar1.20.2.3通过scp命令迁移到其他主机[rootdocker_server ~]scp ./nginx-test.tar 192.168.189.135:/root/1.20.2.4将tar文件变为镜像[rootdocker-server ~]# docker load 镜像.tar ps: [rootdocker-server ~]# docker load nginx-test.tar 将nginx-test.tar加载为镜像2.将镜像推到阿里云仓库2.1找到此处2.2注册仓库2.3进入个人实例找到此处2.4根据指示操作解析docker login --usernamecloud_mind crpi-t98qeucckmpxzkzg.cn-hangzhou.personal.cr.aliyuncs.com 注意粘贴到centos中需要你输入注册仓库时的密码docker tag [ImageId] crpi-t98qeucckmpxzkzg.cn-hangzhou.personal.cr.aliyuncs.com/docker_cloud_test01/postgres:[镜像版本号] 注释 [ImageId]这里填 镜像名:版本号 test:[镜像版本号])这里填 镜像名:版本号 比如这里是mysql则 将[ImageId]改为 mysql:latest 将postgres:[镜像版本号]改为 mysql:latestmysql:最新版docker push crpi-t98qeucckmpxzkzg.cn-hangzhou.personal.cr.aliyuncs.com/docker_cloud_test01/postgres:[镜像版本号] 注释 postgres:[镜像版本号]这里填 镜像名:版本号 比如这里是mysql则将postgres:[镜像版本号]改为 mysql:latestmysql:最新版示例3.docker镜像Docker 镜像是 Docker 容器运行时的只读模板每一个镜像由一系列的层(layers)组成.Docker 使用 UnionFS 来将这些层联合到单独的镜像中。正因为有了这些层的存在Docker 是如此的轻量。当你改变了一个 Docker镜像比如升级到某个程序到新的版本一个新的层会被创建。因此不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做)只是一个新的层被添加或升级了。ps:给一个centos7镜像添加了一个nginx1.12版把它做成镜像即加了一个nginx1.12版的层其中nginx1.12叫做centos7镜像的子镜像centos7镜像叫基础镜像在 Docker 的术语里一个只读层被称为镜像一个镜像是永久不会变的。由于 Docker 使用一个统一文件系统由于镜像不可写所以镜像是无状态的。容器是有状态的运行和停止1.一个镜像可以启动多个容器2.对容器的变更是写到容器的文件系统的不是直接写入到镜像中3.容器间是相互隔离的4.如果对容器的底层镜像镜像修改那么当前正在运行的容器不受影响不会发生自动变更3.1制作docker镜像Docker Build 的真实流程1. 读取Dockerfile第一条指令2. 基于上一步的镜像创建临时容器3. 在容器内执行当前指令4. 将容器提交为新的镜像层5. 删除临时容器6. 重复2-5直到所有指令完成注意docker build 的某些步骤会创建临时容器来执行指令失败时会留下中间镜像层但通常不会留下容器1.制作dockerfile文件[rootdocker_server ~]# vim dockerfile2.编辑dockerfile3.制作镜像语法 docker build -t 镜像名:标签 dockerfile所在目录 如果文件名不是dockerfile是其他的则 docker build -f 其他名字 -t 镜像名:标签 ps: [rootdocker_server ~]# docker build -t centos:7 /root/ -t镜像命名镜像名:版本号 /root/ 指向dockerfile的位置CMD与ENTRYPOINT的区别1.构建镜像时如果写CMD后面加命令然后运行容器时后面加/bin/bash那么CMD的命令会被覆盖掉不执行2.构建镜像时如果写ENTRYPOINT后面加命令然后运行容器时后面加/bin/bash那么ENTRYPOINT的命令不会覆盖会执行并将/bin/bash当做命令参数如果想覆盖ENTRYPOINT的命令docker run -it --entrypoint/bin/bash --name容器名 镜像名
Docker的使用
1.docker常用命令docker常用命令dockerpull 镜像拉取镜像images查看已下载镜像rmi删除镜像run-d后台运行--name指定名称-p端口映射主机端口:容器端口-e配置环境变量-v挂载数据卷--network配置网络--memory资源限制--cpus--restartalways 总是重启unless-stopped 除非手动停止on-failure:重启次数-it进入容器分配一个终端exec -it进入运行中的容器ps查看正在运行的容器ps -a查看所有容器start启动容器stop停止容器restart重启容器rm删除容器1.1拉取镜像[rootdocker_server ~]# docker pull redis1.2创建并启动容器最常见启动容器[rootdocker_server ~]# docker run -d --name redis1 -p 6379:6379 redis 还可以加--restart always表示总是启动即启动docker就启动该容器最常见启动容器[rootdocker_server ~]# docker run -it --name nginx1 nginx /bin/bash -it进入容器并分配一个终端 容器名 镜像 解释器 --name给容器起名nginx1 /bin/bash解释器1.3查看容器[rootdocker_server ~]# docker ps -a1.4进入容器[rootdocker_server ~]# docker exec -it redis1 /bin/bash1.5退出容器ctrlpq1.6停止启动容器[rootdocker_server ~]# docker stop redis1[rootdocker_server ~]# docker stop docker ps -q -关闭所有容器[rootdocker_server ~]# docker start redis11.7查看镜像[rootdocker_server ~]# docker images1.8删除所有镜像[rootdocker_server ~]# docker rmi docker images -p -p显示所有镜像ID1.9删除所有容器[rootdocker_server ~]# docker rm docker ps -a -q[rootdocker_server ~]# docker rm docker ps -qf statusexited -f表示过滤-q表示显示ID号 删除所有statusexited的容器1.10查看镜像制作过程[rootdocker_server ~]# docker history nginx:latest -查看nginx:latest制作过程1.11显示正在运行的容器显示所有容器[rootdocker_server ~]# docker ps -显示正在运行的容器[rootdocker_server ~]# docker ps -a -显示所有容器1.12容器重命名镜像重命名[rootdocker_server ~]# docker rename 旧名 新名 -容器重命名[rootdocker-server ~]# docker tag 旧名:tag 新名:tag -tag是版本号镜像重命名 -保留原镜像1.13显示容器资源消耗情况实时流[rootdocker_server ~]# docker stats1.14实时显示容器日志开两个终端看效果[rootdocker_server ~]# docker logs -f 容器名1.15显示容器退出码开两个终端看效果[rootdocker_server ~]# docker wait 容器名 显示0表示正常退出1.16显示容器的运行进程[rootdocker_server ~]# docker top1.17显示容器底层信息[rootdocker_server ~]# docker inspect 容器名 如果是nginx的话可以在最后看到它的IP地址 IPAddress: 172.17.0.21.18在终端发送HTTP请求-curl[rootdocker_server ~]# curl -I http://172.17.0.2 -I表示显示头部信息 [rootdocker_server ~]# curl http://172.17.0.2 -访问该Ip1.19宿主机容器拷贝文件/目录[rootdocker_server ~]# docker cp -a 发送绝对路径 接收绝对路径 -a表示传目录 ps: [rootdocker_server ~]# docker cp -a /root/dir1 nginx2:/ -宿主机--容器 [rootdocker_server ~]# docker cp -a nginx2:/dir1 /root/dir2 -容器--宿主机1.20容器迁移容器运行时也可以1.20.1将容器打成包迁移1.20.1.1容器打包到宿主机[rootdocker-server ~]# docker export -o 绝对路径/文件名.tar 容器名 ps: [rootdocker-server ~]# docker export -o /root/nginx.tar nginx1 将nginx1容器打包到宿主机/root/下叫nginx.tar1.20.1.2通过scp命令迁移到其他主机[rootdocker-server ~]# scp -r 文件 IP地址:绝对路径 -r传目录 ps: [rootdocker-server ~]# scp nginx.tar 192.168.189.131:/root/ 将nginx.tar传到IP地址为192.168.189.131主机的/root/目录下1.20.1.3其他主机使用[rootdocker_server ~]# docker import docker文件.tar 新镜像名 使用命令后出来的是一个镜像 ps: [rootdocker_server ~]# docker import nginx.tar nginx:latest 将nginx.tar制作为镜像叫nginx:latest1.20.2将容器提交为镜像迁移1.20.2.1容器提交为镜像[rootdocker_server ~]# docker commit 容器名 镜像名:版本号 ps: [rootdocker_server ~]# docker commit nginx1 nginx-test:latest 将容器nginx1提交为镜像1.20.2.2将镜像打包为.tar到主机[rootdocker_server ~]# docker save -o 镜像文件.tar 镜像名:版本号 ps: [rootdocker_server ~]# docker save -o nginx-test.tar nginx-test:latest 将nginx-test:latest镜像打包叫nginx-test.tar1.20.2.3通过scp命令迁移到其他主机[rootdocker_server ~]scp ./nginx-test.tar 192.168.189.135:/root/1.20.2.4将tar文件变为镜像[rootdocker-server ~]# docker load 镜像.tar ps: [rootdocker-server ~]# docker load nginx-test.tar 将nginx-test.tar加载为镜像2.将镜像推到阿里云仓库2.1找到此处2.2注册仓库2.3进入个人实例找到此处2.4根据指示操作解析docker login --usernamecloud_mind crpi-t98qeucckmpxzkzg.cn-hangzhou.personal.cr.aliyuncs.com 注意粘贴到centos中需要你输入注册仓库时的密码docker tag [ImageId] crpi-t98qeucckmpxzkzg.cn-hangzhou.personal.cr.aliyuncs.com/docker_cloud_test01/postgres:[镜像版本号] 注释 [ImageId]这里填 镜像名:版本号 test:[镜像版本号])这里填 镜像名:版本号 比如这里是mysql则 将[ImageId]改为 mysql:latest 将postgres:[镜像版本号]改为 mysql:latestmysql:最新版docker push crpi-t98qeucckmpxzkzg.cn-hangzhou.personal.cr.aliyuncs.com/docker_cloud_test01/postgres:[镜像版本号] 注释 postgres:[镜像版本号]这里填 镜像名:版本号 比如这里是mysql则将postgres:[镜像版本号]改为 mysql:latestmysql:最新版示例3.docker镜像Docker 镜像是 Docker 容器运行时的只读模板每一个镜像由一系列的层(layers)组成.Docker 使用 UnionFS 来将这些层联合到单独的镜像中。正因为有了这些层的存在Docker 是如此的轻量。当你改变了一个 Docker镜像比如升级到某个程序到新的版本一个新的层会被创建。因此不用替换整个原先的镜像或者重新建立(在使用虚拟机的时候你可能会这么做)只是一个新的层被添加或升级了。ps:给一个centos7镜像添加了一个nginx1.12版把它做成镜像即加了一个nginx1.12版的层其中nginx1.12叫做centos7镜像的子镜像centos7镜像叫基础镜像在 Docker 的术语里一个只读层被称为镜像一个镜像是永久不会变的。由于 Docker 使用一个统一文件系统由于镜像不可写所以镜像是无状态的。容器是有状态的运行和停止1.一个镜像可以启动多个容器2.对容器的变更是写到容器的文件系统的不是直接写入到镜像中3.容器间是相互隔离的4.如果对容器的底层镜像镜像修改那么当前正在运行的容器不受影响不会发生自动变更3.1制作docker镜像Docker Build 的真实流程1. 读取Dockerfile第一条指令2. 基于上一步的镜像创建临时容器3. 在容器内执行当前指令4. 将容器提交为新的镜像层5. 删除临时容器6. 重复2-5直到所有指令完成注意docker build 的某些步骤会创建临时容器来执行指令失败时会留下中间镜像层但通常不会留下容器1.制作dockerfile文件[rootdocker_server ~]# vim dockerfile2.编辑dockerfile3.制作镜像语法 docker build -t 镜像名:标签 dockerfile所在目录 如果文件名不是dockerfile是其他的则 docker build -f 其他名字 -t 镜像名:标签 ps: [rootdocker_server ~]# docker build -t centos:7 /root/ -t镜像命名镜像名:版本号 /root/ 指向dockerfile的位置CMD与ENTRYPOINT的区别1.构建镜像时如果写CMD后面加命令然后运行容器时后面加/bin/bash那么CMD的命令会被覆盖掉不执行2.构建镜像时如果写ENTRYPOINT后面加命令然后运行容器时后面加/bin/bash那么ENTRYPOINT的命令不会覆盖会执行并将/bin/bash当做命令参数如果想覆盖ENTRYPOINT的命令docker run -it --entrypoint/bin/bash --name容器名 镜像名