[Docker] 基本命令

Docker 服务

centos通过systemctl命令管理docker服务:

systemctl start docker.service

通过service命令重启Docker服务:

service docker restart

查看版本信息:

docker version

Docker 镜像

获取镜像:

docker pull [name(镜像仓库名)[:tag] ]

查看镜像:

docker images

添加镜像标签:

docker tag [original] [new]

镜像详细信息:

docker inspect [name[:tag] ]

镜像历史:

docker history [name]

搜索镜像:

docker search [name]

删除镜像:

docker rmi IMAGE(tag or imageID)

创建镜像:

  • 基于已有镜像的容器创建:
    • 启动一个镜像,修改之后退出,记住容器ID
    • 使用docker commit 命令提交一个新的镜像
docker commit -m "xxxxx" [-a "xxxxx"] [container ID] [name[:tag] ]
  • 基于本地模板导入
 docker import - [ name[:tag] ]

存储镜像:

docker save -o xxx.tar [name[:tag] ]

载入镜像:

docker load --input xxx.tar

上传镜像:

docker push name[:tag] | [registry_host[:registry_port]/]name[:tag]

Docker 容器

新建容器:

docker create -it [name[:tag]]

启动容器:

docker start [container ID]

新建并启动容器:

docker run [name[:tag]]

启动一个bash 终端,允许用户进行交互:

docker run -it [name[:tag]] /bin/bash

守护态:

docker run -d

获取容器输出信息:

docker logs

终止容器:

docker stop [container ID]

强行终止容器:

docker kill [container ID]

查看所有容器ID:

docker ps -qa

将一个运行态的容器先终止再启动:

docker restart

进入容器:

  • attach (多窗口同步显示,可能阻塞)
docker attach
  • exec (推荐)
docker exec -it [container ID] /bin/bash
  • nsenter工具

删除容器:

docker rm [-f] [container ID]

导出容器:

docker export -o xxxx.tar [container ID]

导入容器:

docker import [-C|--change[=[]]](导入同时执行对容器修改的dockerfile) [-m | --message[=MESSAGE]] file|URL|-[respository[:tag]]

搭建本地私有仓库

使用registry镜像创建私有仓库:

//下载并启动一个registry容器,默认将仓库创建在容器的/tmp/registry目录
docker run -d -p 5000:5000 registry 
//改变仓库目录
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

管理私有仓库:

e.g.
docker tag ubuntu:14.04 10.0.2.2:5000/test
docker push 10.0.2.2:5000/test

信任该私有仓库,可从该仓库pull镜像:

1. 添加Docker daemon启动参数
    DOCKER_OPTS="--INSECURE-REGISTRY 10.0.2.2:5000"
2. 重启Docker服务

数据管理

容器内创建一个数据卷

docker run -d -P(自动映射到本地主机的临时端口,随机,49000~49900) --name web(container name) -v /webapp(挂载到容器的/webapp目录) training/webapp(iamge name) python app.py

挂载本地已有目录到容器中作为数据卷
(加载主机的绝对路径/src/webapp到容器的/opt/webapp):

docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py

创建一个数据卷容器并创建一个数据卷挂载到/dbdata:

docker run [-it] -v /dbdata --name dbdata ubuntu

在其它容器中使用这个数据卷容器,–volumes-from挂载dbdata中的数据卷:

docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu

数据卷备份(借用一个worker容器,先挂载
dbdata中的数据卷,再挂载本地的当前目录到worker的/backup目录,最后将/dbdata目录下内容压缩复制到本地/backup目录):

docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata

数据恢复:

//先创建一个有卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
//再创建一个容器,挂载dbdata2容器,并解压备份文件到所挂载的容器卷中
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

端口映射和容器互联

将本地5000端口映射到容器的500端口:

docker run -d -p 5000:500 training/webapp python app.py

查看当前映射的端口配置:

e.g.
docker port nostalgic_morse 5000
127.0.0.1:49155

容器互联:

//创建一个新的数据库容器
docker run -d --name db trainint/postgres
//再创建一个新的web容器,连接到db容器,web可访问db信息
docker run -d -P --name web --link db:db(别名) training/webapp python app.py

Dockerfile

  • FROM:指定基础镜像

  • MAINTAINER: 维护者信息

  • RUN: 运行指定命令

  • CMD: 指定启动容器是默认执行的命令,一个Dockerfile只能有一个

  • LABEL: 元数据标签信息

  • EXPOSE: 声明镜像内服务所建町的端口,只声明,不会自动完成端口映射

  • ENV: 指定环境变量

  • ADD: 复制指定路径(Dockerfile所在路径的相对路径)下的内容到容器中,如果是tar文件,可自动解压,如果是URL,会下载文件;路径支持正则,e.g. ADD *.c /code/

  • COPY: 只复制文件或者目录到容器里,路径不存在时自动创建,当使用本地目录为源目录时推荐

  • ENTRYPOINT: 指定镜像的默认入口命令,启动容器时作为根命令执行;此时,CMD命令指定值将作为根命令的参数;一个Dockerfile只能有一个

  • VOLUME [“/data”]: 从本地主机或其它容器挂载数据卷

  • USER: 运行容器时的用户名/UID

  • WORKDIR: 可使用多个,后续如果是相对路径,会基于之前命令指定的路径:
    WORKDIR /a
    WORKDIR b
    最终路径为/a/b

  • ARG: 指定镜像内使用的参数

  • ONBUILD: 当该镜像作为其他镜像基础镜像时所执行的创建操作指令

  • STOPSIGNAL: 指定所创建镜像启动的容器接收退出的信号值

  • HEALTHCHECK: 配置所启动容器如何健康检查

  • SHELL [“executable”, “parameters”]: 指定其他命令使用shell时的默认shell类型,默认为[“bin/sh”, “-c”]

创建镜像:

docker build

忽略匹配模式路径下的目录和文件,使用.dockerignore文件:

e.g. 
# comment
*/temp*
*/*/temp*
temp?
~*

猜你喜欢

转载自blog.csdn.net/Blanchedingding/article/details/80270009