| 名称 | 释义 | 备注 |
|---|---|---|
| REPOSITORY | 镜像的仓库源 | |
| TAG | 镜像的版本标签 | 同一仓库源可以有多个 TAG, eg:ubuntu:15.10 ubuntu 仓库源 15.10 标签版本,所以 用 REPOSITORY: TAG 来定义不同的镜像 |
| IMAGE ID | 镜像ID | |
| CREATED | 镜像创建时间 | |
| SIZE | 镜像大小 |
docker login //登录
docker search <镜像名> //搜索 某镜像名 来寻找适合我们的镜像
docker pull <仓库源>:<版本标签> //下载镜像
docker push <镜像name>:<镜像tag>//将自己的镜像推送到 Docker Hub
docker logout //退出
1、从已经创建的容器中更新镜像,并且提交这个镜像
docker run -t -i ubuntu:15.10 /bin/bash //更新镜像之前,我们需要使用镜像来创建一个容器。//第一步通过某需要复制的镜像创建一个容器
apt-get update// 在容器内执行该命令 更新
apt install <命令> //在容器中安装命令 (非必须),
exit / ctrl+c 退出容器
docker commit -m=“has update” -a=“runoob” e218edb10161 runoob/ubuntu:v2 //通过命令 docker commit 来提交容器副本
2、使用 Dockerfile 指令来创建一个新的镜像
| 命令 | 释义 | 备注 |
|---|---|---|
| -FROM | 指定基础镜像 | 必须是第一条指令, 如果不以任何镜像为基础,可以写成FROM scratch |
| -RUN | 运行指定的命令 | RUN是构建容器时就运行的命令以及提交运行结果, Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大 |
| -CMD | 容器启动时要运行的命令(变参) | CMD是容器启动时执行的命令,在构建时并不运行,构建时仅仅指定了这个命令到底是个什么样子.CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。 |
| -EXPOSE | 指定容器运行时监听的端口 | 想要主机和容器之间的端口有映射关系,必须在容器启动的时候加上-P或者-p选项 |
| -ENV | 设置环境变量 | |
| -ARG | 设置变量命令 | 构建参数,与 ENV 作用一致。不过作用域不一样。ARG 设置的环境变量仅对 Dockerfile 内有效,也就是说只有 docker build 的过程中有效,构建好的镜像内不存在此环境变量。 |
| -ADD | 把文件复制到镜像中 | 如果是压缩文件,会自动解压,相当于scp命令,只是ADD不需要进行验证 |
| -COPY | 复制命令 | 与ADD的区别 :COPY的只能是本地文件,并且不能解压,其他用法一致 |
| -ENTRYPOINT | 启动时的默认命令(定参) | 类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。 |
| -VOLUME | 实现挂载数据卷 | 作用:①避免重要的数据,因容器重启而丢失,这是非常致命的。②避免容器不断变大。docker run 时 -v 参数修改挂载点 |
| -USER | 设置启动容器的用户 | |
| -WORKDIR | 设置工作目录 | 设置之后,容器启动就会进入设置的目录中 |
| -ONBUILD | 用于延迟构建命令的执行 | ONBUILD指令只对当前镜像的子镜像生效 |
| -STOPSIGNAL | 当容器退出时给系统发送什么样的指令 | |
| -HEALTHCHECK | 检查容器健康状况 | |
| -LABEL | 用来给镜像添加一些元数据 | key1=value1 key2=value2 形式 |
docker build -t <镜像名> //构件镜像
docker tag <镜像ID> <用户名称>/<镜像源名>
docker images //列出本地主机上的镜像
runoob@runoob:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 14.04 90d5884b1ee0 5 days ago 188 MB
php 5.6 f40e9e0f10c8 9 days ago 444.8 MB
nginx latest 6f8d099c3adc 12 days ago 182.7 MB
mysql 5.6 f2e8d6c772c0 3 weeks ago 324.6 MB
docker image ls //展示所有镜像的关键信息
docker rmi -rf <镜像> //删除本地一个或多个镜像。 (docker rmi -f runoob/ubuntu:v4)
| 名称 | 释义 | 备注 |
|---|---|---|
| CONTAINER ID | 容器 ID | |
| NAMES | 容器名称 | 自动分配 且和id一样保持唯一 |
| IMAGE | 使用的镜像 | eg:ubuntu15.10 |
| COMMAND | 启动容器时运行的命令 | |
| STATUS | 容器状态 | 状态有7种:created(已创建) restarting(重启中) running 或 Up(运行中) removing(迁移中) paused(暂停) exited(停止) dead(死亡) |
| PORTS | 容器的端口信息和使用的连接类型(tcp/udp) | eg : 0.0.0.0:32769->5000/tcp 即 tcp连接 ,Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32769 上。 |
docker run -it <镜像名> /bin/bash //可交互
docker run -d -p <映射主机端口>:
--name <容器名> <应用启动文件> //后台启动一个应用
docker start <容器ID> //启动一个已经停止的容器
docker restart <容器ID> // 重新启动容器
docker attach <容器ID> //进入容器 退出后停止容器,不建议用
docker exec <容器ID> //进入容器 且 退出后不会停止容器
docker stop <容器ID> //停止
docker rm -f <容器ID> //删除镜像
runoob@runoob:~$ docker rm wizardly_chandrasekhar
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
docker export 容器ID> 文件名.tar // 导出并快照到tar文件
cat 文件名.tar | docker import 镜像名 //导入tar文件到某镜像
docker import 某url或目录 镜像名//导入指定 URL 或者某个目录到某镜像(eg : docker import http://example.com/exampleimage.tgz example/imagerepo)
docker commit -m=“提交的描述信息” -a=“指定镜像作者” <容器 ID> <创建的镜像名> // 提交容器副本 保存成新镜像
docker ps -a //查看当前所有容器的信息和状态
runoob@runoob:~# docker ps
CONTAINER ID IMAGE PORTS NAMES
bf08b7f2cd89 training/webapp ... 0.0.0.0:5000->5000/tcp wizardly_chandrasekhar
d3d5e39ed9d3 training/webapp ... 0.0.0.0:32769->5000/tcp xenodochial_hoov
docker port <容器ID或者 容器名称>//查看指定 (ID 或者名字)容器的某个确定端口映射到宿主机的端口号
runoob@runoob:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000
docker top <容器ID/容器名称>
runoob@runoob:~$ docker top wizardly_chandrasekhar
UID PID PPID ... TIME CMD
root 23245 23228 ... 00:00:00 python app.py
docker inspect <容器ID/容器名称>// 来查看 Docker 的底层信息
docker ps -l //查询最后一次创建的容器:
docker logs -f <容器ID/容器名称>
1、先创建一个新的Docker网络
docker network create -d bridge <网络名(eg: test-net)>
2、运行多个容器并连接到新建的网络中
docker run -itd --name <容器名(test1)> --network <网络名(test-net)> <镜像名(ubuntu)> /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
3、多个容器之间需要互相连接,使用 Docker Compose