【工具学习】Docker 命令 - hippowc/hippowc.github.io GitHub Wiki

仓库操作

docker镜像都存于类似git的仓库中,称为docker仓库,一般需要登录,有三个概念:

  • docker管理页面,类似于git页面,可以登录并且创建账号,维护仓库
  • docker注册,类似git仓库地址,譬如reg.docker.xx.com 是仓库地址
# 镜像一般名称
reg.docker.xxx.com/<namespace>/<仓库名称or镜像名称>:tag

账号注册与登录

  • 在docker站点创建账号
  • 在拉取镜像、上传镜像通常需要登录
# 其中reg地址是docker仓库地址,默认是dockerhub
docker login -u <username> [reg地址]
# 登出
docker logout [reg地址]

镜像操作

远程镜像

# 登录
docker login
docker search
# 搜索处收藏数不小于 3 ,并且能够自动化构建的  django 镜像,并且完整显示镜像描述
docker search -s 3 --automated --no-trunc django
docker pull
# 拉取ubuntu最新的镜像
docker pull ubuntu:latest
# 服务器拉取个人动态,可选择时间区间
docker events
# 拉取个人从 2015/07/20 到 2015/08/08 的个人动态
docker events --since="20150720" --until="20150808"

容器提交为镜像

# 保存对容器的修改
docker commit
# 保存某个容器成为一个镜像,然后可以通过docker images看到刚刚的镜像
docker commit -a "user" -m "commit info" [CONTAINER] [imageName]:[imageTag]
# 查看提交记录
docker history
# 推送一个容器到中心仓库
docker login --username=[userName] --password=[pwd] [registryURL]
## 建议登录后查看 docker info
docker tag [imageID] [remoteURL]:[imageTag]
docker push [remoteURL]:[imageTag]
# 拉取提交的容器
docker pull [remoteURL]:[imageTag]
# 对比容器的改动
docker diff

镜像同步操作

# 标记本地镜像,将其归入某一仓库
docker tag
# 将 ID 为 5db5f84x1261 的容器标记为 mine/lnmp:0.2 镜像
docker tag 5db5f84x1261 mine/lnmp:0.2
# 将镜像推送至远程仓库,默认为 Docker Hub
docker push

本地镜像

# 列出本地所有镜像
docker images
# 本地镜像名为 ubuntu 的所有镜像
docker images ubuntu
# 查看指定镜像的创建历史
docker history [id]
# 本地移除一个或多个指定的镜像
docker rmi
# 移除本地全部镜像
docker rmi `docker images -a -q`
# 指定镜像保存成 tar 归档文件, docker load 的逆操作
docker save
# 将镜像 ubuntu:14.04 保存为 ubuntu14.04.tar 文件
docker save -o ubuntu14.04.tar ubuntu:14.04
# 从 tar 镜像归档中载入镜像, docker save 的逆操作
docker load
# 上面命令的意思是将 ubuntu14.04.tar 文件载入镜像中
docker load -i ubuntu14.04.tar
docker load < /home/save.tar
# 构建自己的镜像
docker build -t <镜像名> <Dockerfile路径>
docker build -t xx/gitlab .

容器操作

查看容器信息

  • docker ps 查看运行的容器
  • docker ps -a 查看所有容器
  • docker ps -as 查看容器占用空间
  • docker top [containerId] 查看容器的top信息
  • docker inspect [containerId] 查看容器详细信息
  • docker cp <宿主机目录> <容器标志>:<容器目录> 宿主机与容器互相拷贝,反过来也可以

容器操作

  • docker run 运行一个新容器,同时为它命名、端口映射、文件夹映射
// 使用 docker run --help 查看
// -d 后台运行容器
// -it 交互式运行容器
// --name 容器名称
// --net 网络模式,与宿主机共用选host
// -v 目录映射,本机目录 : 容器目录
// -p 端口映射,本机端口 : 容器端口
// -e 设定环境变量
// -w 设置容器中的workdir
docker run -d --name redmine \
-p 9003:80 -p 9023:22 -d \
-v /var/redmine/files:/redmine/files -v /var/redmine/mysql:/var/lib/mysql \
-e PATH=xxx
-it sameersbn/redmine
  • docker create --name [containerName] -it [imageName]
  • docker rm [containerId] 删除容器

交互式进入容器

只用 -i 参数,由于没有分配伪终端,看起来像pipe执行一样。但是执行结果、命令返回值都可以正确获取
只用 -t 参数,则可以看到一个 console 窗口,但是执行命令会发现由于没有获得stdin的输出,无法看到命令执行情况
使用 -it 时,则和我们平常操作 console 界面类似,而且也不会像attach方式因为退出,导致整个容器退出
使用 -d 参数,在后台执行一个进程。如果一个命令需要长时间进程,会很快返回

sudo docker exec -it {{containerName or containerID}} bash
sudo docker exec -i {{containerName or containerID}} bash
sudo docker exec -t {{containerName or containerID}} bash
sudo docker exec -d {{containerName or containerID}} bash

Docker attach可以attach到一个已经运行的容器的stdin,然后进行命令执行的动作
docker attach {{containerName or containerID}}

启动停止容器等操作

docker start|stop|restart [id]
# 暂停|恢复 某一容器的所有进程
docker pause|unpause [id]
# 杀死一个或多个指定容器进程
docker kill -s KILL [id]
# 停止全部运行的容器
docker stop `docker ps -q`
# 杀掉全部运行的容器
docker kill -s KILL `docker ps -q`

run、exec、attach区别

  • docker run;创建和启动一个新的容器实例,操作对象是镜像,选项较多,如果你要创建和启动一个容器,只能用run
  • docker exec: 在已运行的容器中,执行命令,操作对象是容器,如果你要进入已运行的容器,并且执行命令,用exec
  • docker attach: 同样操作的是已运行的容器,可以将本机标准输入(键盘输入)输到容器中,也可以将容器的输出显示在本机的屏幕上,如果你想查看容器运行过程中产生的标准输入输出,用attach

容器资源限制参数

# 限制内存最大使用
-m 1024m --memory-swap=1024m
# 限制容器使用CPU
--cpuset-cpus="0,1"

导入导出容器

# 支持远程文件 .tar, .tar.gz, .tgz, .bzip, .tar.xz, .txz
docker import
# 导出
docker export [id] >~/Downloads/ubuntu_nexus.tar

网络配置

在使用docker run创建容器是,可以使用 --net 指定容器的网络模式,有以下4中网络模式

  • host模式:--net=host
    • 容器不会获得独立的network namespace,不会虚拟自己的网卡,不需要配置IP,与宿主机共用,使用宿主机的IP和端口
  • container模式, --net=container:
    • 指定新建的容器与已经存在的容器共享一个Network Namespace,IP,端口范围等,其他如文件系统,进程列表等还是隔离的
  • none模式,--net=none
    • Docker拥有自己的network namespace,但是需要自己为容器添加网卡,配置IP
  • bridge模式,--net=bridge,默认
    • 为容器分配network namespace,并链接到一个虚拟网桥上,要为容器分配IP

存储配置

Docker采用Volume(卷)的形式为容器提供持久化的服务,docker采用AFUS分层文件系统,文件系统的改动都发生在最上层,在容器的生命周期内,它是持续的,包括容器被停止,但是当容器删除后,该数据层也会被删除

在使用docker run创建容器时,配置卷,有几种模式

  • 不配置,默认。容器的数据被保存在容器之内,它只在容器的生命周期内存在,会随着容器的被删除而被删除。也可以使用 docker commit 命令将它持久化为一个新的镜像。
  • data volume。当删除容器时,不会删除该目录
    • -v <容器目录> :会将容器目录默认挂载到本机的目录下,具体为止可以通过docker inspect 查看
    • -v <本机目录>:<容器目录>,可以是目录,也可以是文件,要指明路径
  • data container。在容器之间共享数据
docker create -v /dbdata --name dbstore training/webapp  /bin/true
docker run -d -P --name web3 --volumes-from dbstore training/webapp python app.py

其他

查看docker信息

  • docker version 查看docker 版本
  • docker info 显示当前运行的docker系统信息
  • service docker status 查看docker 服务信息
  • service docker start|stop docker服务的启动关闭

日志类

  • docker logs

常用命令

docker详情参考:https://yeasy.gitbook.io/docker_practice/

基础命令

Docker 1.12命令行大摡有40个顶级命令。虽然这些命令处理得很好但缺乏命令名称的一致性,Docker 1.13修复了这些问题,将命令按照逻辑分组到管理命令中。

checkpoint  Manage checkpoints
container   Manage containers
image       Manage images
network     Manage networks
node        Manage Swarm nodes
plugin      Manage plugins
secret      Manage Docker secrets
service     Manage services
stack       Manage Docker stacks
swarm       Manage Swarm
system      Manage Docker
volume      Manage volumes

现在获取镜像列表使用docker image ls来代替docker images命令。类似的还有docker container ls代替docker ps来显示容器列表。这就带来了很多一致性的命令,为新手以及专业人士更为直观且容易记住命令。每个管理命令有一套类似的子命令,他们负责执行操作。

子命令     用途

ls          获取<image,container,volume,secret等等>的列表
rm          移除<image,container,volume等等>
inspect     检阅<image,container,volume等等>

Docker单独命令映射到管理命令

1.12    1.13                用途

attach  container attach    附加到一个运行的容器
build   image build         从一个Dockerfile构建镜像
commit  container commit    从一个容器的修改创建一个新的镜像
cp      container cp        在容器与本地文件系统之间复制文件/文件夹
create  container create    创建新的容器
diff    container diff      检阅一个容器文件系统的修改
events  system events       获取服务器的实时时间
exec    container exec      在运行的容器内执行命令
export  container export    打包一个容器文件系统到tar文件
history image history       展示镜像历史信息
images  image ls            展示镜像列表
import  image import        用tar文件导入并创建镜像文件
info    system info         展示整个系统信息
inspect container inspect   展示一个容器/镜像或者任务的底层信息
kill    container kill      终止一个或者多个运行中的容器
load    image load          从tar文件或者标准输入载入镜像
login   login               登录Docker registry
logout  logout              从Docker registry登出
logs    container logs      获取容器的日志
network network             管理Docker网络
node    node                管理Docker Swarm节点
pause   container pause     暂停一个或者多个容器的所有进程
port    container port      展示容器的端口映射
ps      container ls        展示容器列表
pull    image pull          从某个registry拉取镜像或者仓库
push    image push          推送镜像或者仓库到某个registry
rename  container rename    重命名容器
restart container restart   重启容器
rm      container rm        移除一个或多个容器
rmi     image rm            移除一个或多个镜像
run     container run       运行一个新的容器
save    image save          打包一个或多个镜像到tar文件(默认是到标准输出)
search  search              在Docker Hub搜索镜像
service service             管理Docker services
start   container start     启动一个或者多个容器
stats   container stats     获取容器的实时资源使用统计
stop    container stop      停止一个或多个运行容器
swarm   swarm               管理Docker Swarm
tag     image tag           标记一个镜像到仓库
top     container top       展示容器运行进程
unpause container unpause   解除暂停一个或多个容器的所有进程
update  container update    更新一个或多个容器的配置
version version             显示Docker版本信息
volume  volume              管理Docker volumes
wait    container wait      阻塞直到容器停止,然后打印退出代码
⚠️ **GitHub.com Fallback** ⚠️