Docker常用命令
子命令分类 子命令
Docker 环境命令 info、version
容器生命周期管理 create、exec、kill、pause、restart、rm、run、start、stop、unpause
镜像仓库命令 login、logout、pull、push、search
镜像管理 build、images、import、load、rmi、save、tag、commit
容器运维操作 attach、export、inspect、port、ps、rename、stats、top、wait、cp、diff、update
容器资源管理 volume、network
系统日志信息 events、history、logs
##################################################################
docker images 查看所有镜像
docker rmi 镜像名称 删除镜像
docker ps -a 查看所有容器(不管运行的,还是停止…)
docker rm 容器ID 删除容器(容器必须停止)
docker run -it 镜像名称 bash 运行镜像创建容器 (不推荐 it指交互界面;bash指bash程序,可以不写,因为默认为bash)
docker run -it -p 宿主机端口:容器端口 镜像名称 bash 端口映射(运行镜像,创建容器,并端口映射)
宿主机端口 :随便取;容器端口,mariadb 的 端口
docker start -i 容器ID 启动容器
docker stop 容器ID 关闭容器(),或者可以在容器内部(it 交互界面)使用 exit 指令
docker save 镜像名称 > 镜像路径 导出镜像文件
docker load < 镜像路径 导入镜像(如果docker有相同镜像,把之前的删除再导入)
---------------------------------------------------------------
docker Import 容器路径 镜像名称 导入容器(同时导入镜像)
docker export 容器ID > 镜像路径 导出容器
----------------------------------------------------------------
docker commit 容器ID 镜像名称 把容器保存成镜像
##################################################################
查看docker版本信息
#docker version
#docker -v
#docker info
##################################################################
镜像
1.获取镜像
docker pull dl.dockerpool.com:5000/ubuntu:14.04(dl.dockerpool.com为注册服务器,5000为端口号,ubuntu为仓库名称,14.04是镜像也是版本号)
2.查看镜像信息
docker images(列出本地主机已有的所有镜像)
docker images -a (显示当前系统所有镜像,包括过渡层镜像 )
docker images ubuntu (显示当前系统 docker ubuntu 库中的所有镜像)
更改变迁信息
docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest
docker inspect 000(000为镜像ID,显示这个镜像的详细信息)
3.搜寻镜像
docker search mysql (输出信息包括镜像名字、描述、星级、是否为官方创建、是否自动创建)
4.删除镜像
docker rmi dl.dockerpool.com:5000/ubuntu:latest
注:当有该镜像创建的容器存在时,镜像文件默认是无法删除的,所以删除镜像前最好是删除所有依赖该镜像的容器,请不要用强制删除。
5.创建镜像
有三种方法:
a. 基于已有镜像的容器创建
docker commit -m “add new image”-a “” 000(容器ID) test(新建image name)
b. 基于本地模板导入
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
c. 基于dockerfile创建
6.存出镜像
docker save -o ubuntu_14.04.tar ubuntu:14.04
7.载入镜像
docker load --input ubuntu_14.04.tar 或者
docker load < ubuntu_14.04.tar
8.上传镜像
docker push user/test:latest(user用户需要在dockerHub网站注册)
image镜像操作命令
#docker search image_name //检索image
#docker pull image_name //下载镜像
#docker images //列出本地镜像,查看所有镜像 -a, --all=false Show all images; --no-trunc=false Don’t truncate output; -q, --quiet=false Only show numeric IDs
//删除一个或者多个镜像; -f, --force=false Force; --no-prune=false Do not delete untagged parents
#docker rmi image_name
//显示一个镜像的历史; --no-trunc=false Don’t truncate output; -q, --quiet=false Only show numeric IDs
#docker history image_name
##################################################################
容器
容器是镜像的一个运行实例,但它带有额外的可写层
1.创建容器
docker create -it ubuntu:12.04
2.创建并启动容器
docker run -it ubuntu:12.04 /bin/bash
3.守护态运行
docker run -d ubuntu:12.04
4.查看容器信息
docker ps [-a -q 查看终止状态]
5.获取容器的输出信息
docker logs cet(cet是容器ID前三个字符)
6.终止容器
docker stop cet
7.启动容器
docker start cet
8.重启容器
docker restart cet
9.进入容器
- attach命令
docker attach nostalgic(nostalgic是docker的name)
缺点:所有窗口同步显示 - exec命令
docker exec -it 243… /bin/bash (243…为docker ID) - nsenter命令
a)找PID
PID=$(docker-pid 243…)
b)通过PID链接容器
nsenter --target $PID --mount --uts --ipc --net --pid
10.删除容器
docker rm [-f -l -v] cet
-f 强行终止并删除
-l 删除容器的链接,保留容器
-v 删除挂载的数据卷
(可以使用 docker rm 92 命令快速删除容器 920c0f3c240a,但是无法使用 docker rm 3f 命令进行快速删除某个容器,因为有两个以 3f 开头的容器,你必须用 docker rm 3f2 或者 docker rm 3f8 指定删除其中一个。)
11.导出容器
docker export cet >test.tar
12.导入容器(将容器快照导入到本地镜像库)
cat test.tar | docker import - test/ubuntu:v1.0(重新指定标签为ubuntu的镜像名称,v1.0的版本号
docker load 也可以导入镜像存储文件到本地镜像库,他比import方式的好处是:import导入镜像快照文件将丢失所有的历史记录和元数据信息。
**注:**通过导出容器和导入容器可以实现容器迁移(拷贝文件)
容器操作
在容器中运行"echo"命令,输出"hello word"
$docker run image_name echo “hello word”
交互式进入容器中
$docker run -i -t image_name /bin/bash (exit后容器还存在但非已停止)
后台启动镜像 并更改镜像名字
$docker run -d --name myImage centos
在容器中安装新的程序
$docker run image_name yum install -y app_name
列出当前所有正在运行的container
$docker ps
列出所有的container
$docker ps -a
列出最近一次启动的container
$docker ps -l
保存对容器的修改; -a, --author="" Author; -m, --message="" Commit message
$docker commit ID new_image_name
删除所有容器
$docker rm docker ps -a -q
删除单个容器; -f, --force=false; -l, --link=false Remove the specified link and not the underlying container; -v, --volumes=false Remove the volumes associated to the container
$docker rm Name/ID
停止、启动、杀死一个容器
$docker stop Name/ID
$docker start Name/ID
$docker kill Name/ID
从一个容器中取日志; -f, --follow=false Follow log output; -t, --timestamps=false Show timestamps
$docker logs Name/ID
列出一个容器里面被改变的文件或者目录,list列表会显示出三种事件,A 增加的,D 删除的,C 被改变的
$docker diff Name/ID
显示一个运行的容器里面的进程信息
$docker top Name/ID
从容器里面拷贝文件/目录到本地一个路径
$docker cp Name:/container_path to_path
$docker cp ID:/container_path to_path
从本地一个路径拷贝文件/目录到容器里面
docker cp /haiou/sw 2822fc4e37d2:/ # 将sw目录拷贝到容器的根目录下
1、宿主机文件到容器:docker cp 当前宿主机的文件 容器ID或者容器name:容器目录:
docker cp jdk-8u144-linux-x64.tar.gz testUbuntu:/home/kanpiaoxue/develop/jdk/
2、文件从容器到宿主机: docker cp 容器ID或者容器name:容器目录 当前宿主机的文件
重启一个正在运行的容器; -t, --time=10 Number of seconds to try to stop for before killing the container, Default=10
$docker restart Name/ID
附加到一个运行的容器上面; --no-stdin=false Do not attach stdin; --sig-proxy=true Proxify all received signal to the process
$docker attach ID
#访问另一个容器的命名空间 进入另一个容器
#安装Linux工具包
$ yum install -y util-linux
#获取容器的Pid
$docker inspect --format “{{.State.Pid}}” containerName
#进入容器
$ nsenter --target Pid --mount --uts --ipc --net --pid
#容器网络配置
#随机生成container到host端口映射
$docker run -d -P --name myNginx nginx
#指定特定端口 将container 80到host91端口的映射
$docker run -d -p 91:80 --name myNginx imageName
-p ip: hostPort:containerPosrt
$docker ps –l
##################################################################
仓库
仓库是集中存放镜像的地方,一个注册服务器上有很多仓库,一个仓库中有很多镜像。
-
登录
docker login -
基本操作
查找、上传、下载 -
自动创建
-
查看镜像
http://www.dockerpool.com/downloads -
更新镜像标签
docker tag dl.dockerpool.com:5000/ubuntu:12.04 ubuntu:12.04(将前面的镜像更改为ubuntu:12.04) -
创建私有仓库
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry(自动下载并启动registry容器,创建本地的私有仓库服务,默认仓库船舰的容器在/tmp/registry,可以通过-v参数来存放到指定路径上)
7.管理私有仓库镜像
假设私有仓库地址为10.0.2.2,端口为5000,
docker tag ubuntu:14.04 10.0.2.2:5000/test(更改标签名)
docker push 10.0.2.2:5000/test(push镜像,会自动push到10.0.2.2地址的机器上)
curl http://10.0.2.2:5000/v1/search(查看仓库10.0.2.2:5000中是否含有test镜像)
docker pull 10.0.2.2:5000/test(在任何一台能访问到10.0.2.2地址的机器上下载镜像)
##################################################################
docker数据管理
-v 绑定挂载一个数据卷 -h 给容器指定一个主机名
$docker run -it --name volume-test1 -h nginx -v /data/ imageName
#或着手动设置映射
$docker run -it --name volume-test1 -h nginx -v /opt:/opt imageName
#挂载另一容器, 另一容器volume-test2(即使容器已经停掉)来做volume-test1的专门的存储
$docker run -it --name volume-test1 -h nginx --volumes-from volume-test2 imageName
#显示数据卷到host主机的映射关系
$docker inspect -f {{.Volumes}} volume-test1