Docker简要教程

1. 镜像

1.查看本地镜像:docker images

2.修改镜像

sudo docker commit -m "备注信息" -a "作者信息" 容器ID 仓库名和Tag信息

3.创建镜像(使用Dockerfile)

Dockerfile包含了基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,使用#来注释。

  • FROM 指令告诉 Docker 使用哪个镜像作为基础
  • 接着是维护者的信息
  • RUN开头的指令会在创建中运行,比如安装一个软件包,在这里使用 apt-get 来安装了一些软件
  • ADD 命令复制本地文件到镜像;
  • 用 EXPOSE 命令来向外部开放端口;
  • 用 CMD 命令来描述容器启动后运行的程序等

构建命令:docker build -t="tag信息" .

  • “.”表示当前目录下寻找Dockerfile文件,注意一个镜像不能超过 127 层
  • tag信息可以包含两部分信息,即:REPOSITORY:Tag。可以通知指定REPOSITORY的名称和Tag信息,中间使用冒号分隔。若不指定,默认为REPOSITORY的名字,Tag默认使用latest.

4.存出和载入镜像

sudo docker save -o ubuntu_14.04.tar ubuntu:14.04//导出镜像
sudo docker load < ubuntu_14.04.tar//载入镜像

5.删除镜像

docker rmi 镜像ID或名字:Tag信息

2. 容器

1、启动容器

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

  • 新建并启动
    docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
    示例:docker run ubuntu:latest /bin/echo "HelloDocker"//打印HelloDocker
    docker run -it ubuntu:latest /bin/bash //使用交互模式启动一个容器
    sudo docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"//以守护模式运行
    注意:docker -P(大写)会随机映射可用端口到容器,docker -p(小写) 5000:5000 映射指定端口。 可使用docker port <container> 查看容器端口映射

  • 启动关闭的容器
    docker start 容器名字/容器ID

2.关闭容器

docker stop 容器名字/容器ID

3.进入容器

docker attach 容器名字/容器ID

4.导出/导入容器

  • 导出:docker export 7691a814370e > ubuntu.tar
  • 导入为镜像:docker import http://example.com/exampleimage.tgz example/imagerepo 或者 cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0

5.删除镜像

docker rm 容器名字/容器ID

3.docker registry

docker-registry 是官方提供的工具,可以用于构建私有的镜像仓库.

1.安装docker registry

首先拉取registry镜像,docker pull registry.官网的速度一般会比较慢,国内有几个docker镜像网站,一个是阿里云(参看http://help.aliyun.com/knowledge_detail.htm?knowledgeId=5974865),一个是dockerpool(地址:http://dockerpool.com/downloads

比如我们使用dockerpool来下载registry镜像, docker pull dl.dockerpool.com:5000/registry. 当我们在执行下载不是官网的镜像,可能会遇到证书错误。此时需要在docker的配置文件添加对应仓库地址的配置。

Ubuntu 系统的配置文件是 /etc/default/docker,Centos 系统的配置文件放在 /etc/sysconfig/docker。 打开配置文件,添加或修改如下配置:
DOCKER_OPTS="--insecure-registry dl.dockerpool.com:5000"//添加仓库地址,
如果是阿里云,则添加:--insecure-registry registry.mirrors.aliyuncs.com

2.启动registry,sudo docker run -d -p 5000:5000 registry, 在5000端口启动registry监听服务。

启动参数项有如下:

$ sudo docker run \
         -e STORAGE_PATH=/registry \
         -p 5000:5000 \
         registry

默认情况,Storage_path 为/tmp/registry,我们可以通过-v将其映射到宿主机上。如:sudo docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

3.在私有仓库管理镜像

  • 上传镜像: 首先使用docker tag命令,将镜像正确的命名,命名格式为:docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG].
    比如:sudo docker tag ba58 127.0.0.1:5000/mysql 然后使用docker push命令推送镜像到仓库。

  • 搜索镜像:curl http://127.0.0.1:5000/v1/search 如果看到

    {
     "num_results": 1, 
     "query": "", 
     "results": [
           {"description": "", 
            "name": "library/mysql"
            }]
     }

    类似这样的结果,就表示镜像上传成功

  • 下载镜像: docker pull 127.0.0.1:5000/mysql

4.数据镜像

可以使用-v来映射宿主机的目录到docker容器中,也可以使用–volumes-from 挂载映射了宿主机的容器来映射,如: docker run -d --volumes-from dbdata --name db1 training/postgres

5.容器互联

  • 第一种方式:通过暴露端口给宿主机,然后通过宿主机的ip和端口映射来访问其他容器。
  • 第二种方式:使用–link进行容器之间安全互联,如:docker run --link mysql:db -it ubuntu:latest //这里将mysql容器映射给新启动的容器,在容器中使用的名字为:db . 在新容器可以通过db这个主机名或者db主机名对应的ip(ping db)进行访问。

6.Dockerfile

  • FROM : : 基础镜像信息

  • MAINTAINER : 维护者信息

  • RUN 或 RUN [“executable”, “param1”, “param2”] : 前者将在 shell 终端中运行命令,即 /bin/sh -c;后者则使用 exec 执行。指定使用其它终端可以通过第二种方式实现,例如 RUN [“/bin/bash”, “-c”, “echo hello”]。 每条 RUN 指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用 \ 来换行。

  • CMD : 支持三种格式
    CMD [“executable”,”param1”,”param2”] 使用 exec 执行,推荐方式;
    CMD command param1 param2 在 /bin/sh 中执行,提供给需要交互的应用;
    CMD [“param1”,”param2”] 提供给 ENTRYPOINT 的默认参数;
    指定启动容器时执行的命令,每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。 如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令.

  • EXPOSE […] : 告诉docker容器暴露的端口

  • ENV : 设置环境变量

  • ADD : 复制文件,可以复制本地、url路径文件以及tar文件(自动解压)

  • COPY :复制文件,仅支持本地文件

  • ENTRYPOINT [“executable”, “param1”, “param2”] 或 ENTRYPOINT command param1 param2(shell中执行),ENTRYPOINT只能有一条生效,如果有多条,最后一条生效。配置容器启动后执行的命令,不会被容器启动的命令参数覆盖。

  • VOLUME [“/data”] : 创建一个可以从本地主机或其他容器挂载的挂载点,也可使用-v来挂载,比如docker run -v /data //docker会自动分配一个宿主机目录与容器中的/data映射,具体映射路径可以使用 docker inspect -f {{.Volumes}} 查看,返回示例:map[/data:/var/lib/docker/vfs/dir/9cc775458c9b1d350bff27e025087788862a4a7dffe6254f89948ac741df7a01],表示宿主机的/var/lib/docker/vfs/dir/9cc775458c9b1d350bff27e025087788862a4a7dffe6254f89948ac741df7a01目录与容器中的/data映射。 -v参数也可以指定映射的目录,比如:docker run -v /tmp/data:/data <image> 表示映射宿主机的/tmp/data到容器的/data. inspect 的结果为:map[/data:/tmp/data]

_注意:_docker初始化完成才会将宿主机的目录挂载到容器的目录,因此原有的docker容器目录下的文件会被宿主机的目录覆盖(如果宿主机的目录为空,则会清空docker容器的该目录),如果是挂载类似配置文件目录等启动需要的文件时,应该在docker初始化后,通过命令拷贝到docker容器目录。

  • USER : 指定运行容器时的用户名或 UID
  • WORKDIR /path/to/workdir : 指定RUN、CMD、ENTRYPOINT命令配置工作目录,可有多个WORKDIR,如:

    WORKDIR /a
    WORKDIR b
    WORKDIR c
    RUN pwd

    则最终的工作目录为:/a/b/c

  • ONBUILD [INSTRUCTION] : 表示当前创建的镜像做为其他新镜像的基础镜像时,新镜像构造的时候会自动执行ONBUILD的指令。

4.一些命令

删除所有的已停止的容器: docker rm $(docker ps -f status=exited -q)
关闭所有运行的容器: docker stop $(docker ps -f status=up -q)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值