docker基础之常用命令小结(三)
一 帮助命令
docker version #显示docker的版本信息 docker info #显示docker的系统信息,包括镜像和容器的数量 docker 命令 --help #命令帮助信息
帮助文档地址:https://docs.docker.com/reference/
二 镜像命令
docker images # #-a , --all #显示所有镜像 #-q , --quiet #只显示镜像id docker search #镜像搜索 docker pull 镜像名:[tag] #镜像下载 docker rmi 镜像名/镜像id #删除镜像 #-f #强制删除
三 容器命令
docker run [可选参数] image #参数说明 --name "name" #容器名字,来区别容器 -d #后台方式运行 -it #交互方式运行,进入容器 -p #指定容器的端口 -p 8000:8000 -p ip:主机端口:容器端口 -p 主机端口:容器端口(常用) -p 容器端口 -P #随机指定端口 docker run -it centos /bin/bash #交互方式运行 exit #退出(直接停止容器运行) 快捷键 ctrl+q+p #不停止退出容器 # 容器为空容器(没有运行任务)有时候后台运行后,容器又立马停止 docker ps 命令 -a #列出运行的容器+历史运行过的容器 -n=? #列出最近创建的容器 -q #只显示容器的编号 docker rm 容器名 #删除容器
docker container rm 容器id
docker container prune #清除所有终止状态的容器 docker start 容器id / docker container start #开始容器 docker restart 容器id #重启容器 docker stop 容器id / docker container stop # 停止容器 docker kill 容器id # 强制停止容器
#当利用 docker run
来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从 registry 下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
四 其他命令
docker run -d image #后台启动容器 #常见的坑 docker使用后台运行,必须有个前台进程,docker发现没有应用运行,就会自动停止 docker logs #查看日志 docker logs --help docker logs -tf -tail 10 容器id #查看前10条日志 docker top 容器id #查看容器进程信息 docker inspect 容器id #查看容器内部信息 docker exec -it容器id bashshell #进入正在运行的容器,新终端 docker attch 容器id #进入容器,当前的终端 docker cp 容器id:容器内路径 目的主机路径 #从容器内拷贝文件到主机 #拷贝为手动过程,之后通过挂载卷 -v 实现宿主机和容器目录共享
# 提交本地镜像 (分层文件提交,类似于git) # -a:作者信息 -m:描述信息 容器ID 镜像名称:版本信息 docker commit -a="test" -m="test" 容器id tomcat01:1.0
docker diff 容器id #容器改动
docker history 镜像:[tag] #镜像的改动历史
docker tag [镜像id] 新镜像名:[tag] #给镜像设置版本号,重新命名镜像,以便可以push等(带用户名)
docker network --help #docker网络设置
#简述docker网络
#1.docker的网络模式(和VM有些类似),bridge,host,container,none。 veth pair技术(模拟网线,虚拟两个端口数据通信)容器的eth0和docker0网桥veth1成对配置
#2.docker默认是bridge网桥,地址范围是*.*.0.0/16范围,run运行命令不加网络参数默认就是 --net bridge(运行的容器只可以通过ip互通)
#3.可以通过docker network create 创建新的网桥名,这是新的网段范围, 运行容器是加 --net 网桥名(运行的容器可以容器名/ip互通)
#4.--link 容器互通(可以是同网段通过容器名互通)设置容器A通容器B,但不一定容器B可以通容器A,这种底层原理是给修改容器的/etc/host文件 (所以不常用)
#5.如果容器跨网桥互通 (把容器加入某网桥 docker network connect NETWORK CONTAINER)
# 容器跨网段互通,就是给容器加多个'网卡'也不是最好方案
#6.不同宿主机间容器的互通(借助overlay,macvlan,ipvlan,flannel,weave,calico等)估计这时要抽象出虚拟交换机或路由器了
五、容器的导出导入
导出本地某个容器,可以使用 docker export
命令。
$ docker container ls -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7691a814370e ubuntu:18.04 "/bin/bash" 36 hours ago Exited (0) 21 hours ago test $ docker export 7691a814370e > ubuntu.tar #这样将导出容器快照到本地文件。
使用 docker import
从容器快照文件中再导入为镜像
$ cat ubuntu.tar | docker import - test/ubuntu:v1.0 $ docker image ls REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE test/ubuntu v1.0 9d37a6082e97 About a minute ago 171.3 MB
#Linux 小知识点管道符,把第一个命令的结果,作为后一个命令的输入,等价下面的导入命令
docker import ubuntu.tar runoob/ubuntu:v4
此外,也可以通过指定 URL 或者某个目录来导入,例如:
$ docker import http://example.com/exampleimage.tgz example/imagerepo
注:用户既可以使用 docker load
来导入镜像存储文件到本地镜像库,也可以使用 docker import
来导入一个容器快照到本地镜像库。这两者的区别在于容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也要大。此外,从容器快照文件导入时可以重新指定标签等元数据信息。
六.Docker仓库
仓库(Repository
)是集中存放镜像的地方。
一个容易混淆的概念是注册服务器(Registry
)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 docker.io/ubuntu
来说,docker.io
是注册服务器地址,ubuntu
是仓库名。
大部分时候,并不需要严格区分这两者的概念。
1、Docker Hub
目前 Docker 官方维护了一个公共仓库 Docker Hub (opens new window),其中已经包括了数量超过 8,250,000 (opens new window)的镜像。大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
注册 https://hub.docker.com
登录
可以通过执行 docker login
命令交互式的输入用户名及密码来完成在命令行界面登录 Docker Hub。通过 docker logout
退出登录。
拉取镜像
以通过 docker search
命令来查找官方仓库中的镜像,并利用 docker pull
命令来将它下载到本地。
例如以 centos
为关键词进行搜索:
$ docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 6449 [OK] ansible/centos7-ansible Ansible on Centos7 132 [OK] consol/centos-xfce-vnc Centos container with "headless" VNC session… 126 [OK] jdeathe/centos-ssh OpenSSH / Supervisor / EPEL/IUS/SCL Repos - … 117 [OK] centos/systemd systemd enabled base container. 96 [OK]
推送镜像
用户也可以在登录后通过 docker push
命令来将自己的镜像推送到 Docker Hub。
以下命令中的 username
请替换为你的 Docker 账号用户名。
$ docker tag ubuntu:18.04 username/ubuntu:18.04 $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 275d79972a86 6 days ago 94.6MB username/ubuntu 18.04 275d79972a86 6 days ago 94.6MB $ docker push username/ubuntu:18.04 $ docker search username NAME DESCRIPTION STARS OFFICIAL AUTOMATED username/ubuntu
2、私有仓库 (演示阿里云)
1.注册账户,登录阿里云容器镜像仓库,先创建一个镜像仓库。
容器镜像仓库 : https://cr.console.aliyun.com/
2.创建成功后,点击进入仓库,有使用帮助非常清晰.
1. 登录阿里云Docker Registry
$ docker login --username=hi349*****@aliyun.com registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
2. 从Registry中拉取镜像
$ docker pull registry.cn-hangzhou.aliyuncs.com/fps2tao/centos01_test:[镜像版本号]
3. 将镜像推送到Registry
$ docker login --username=hi349*****@aliyun.com registry.cn-hangzhou.aliyuncs.com $ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/fps2tao/centos01_test:[镜像版本号] $ docker push registry.cn-hangzhou.aliyuncs.com/fps2tao/centos01_test:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
4. 选择合适的镜像仓库地址
从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。
5. 示例
使用"docker tag"命令重命名镜像,并将它通过专有网络地址推送至Registry。
$ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB $ docker tag 37bb9c63c8b2 registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
使用 "docker push" 命令将该镜像推送至远程。
$ docker push registry-vpc.cn-hangzhou.aliyuncs.com/acs/agent:0.7-dfb6816
转 : https://www.cnblogs.com/nm666/p/15264583.html