Docker-基本操作
Ubuntu安装Docker
- 卸载可能存在的旧版本
sudo apt-get remove docker docker-engine docker-ce docker.io
- 添加Docker官方的gpg密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 设置stable存储库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 更新apt
sudo apt-get update
- 安装最新版
sudo apt-get install -y docker-ce
容器/镜像/仓库 使用及管理
测试
安装完成后Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。
输出Hello world
runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello world"
Hello world
-
docker: Docker 的二进制执行文件。
-
run: 与前面的 docker 组合来运行一个容器。
-
ubuntu:15.10 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
-
/bin/echo “Hello world”: 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
容器
- 通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力,进入容器:
runoob@runoob:~$ docker run -it ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#
- CTRL+D 退出容器或exit
root@0123ce188bd8:/# exit
docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。
- 创建并启动容器
runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63
–name [name]:容器命名
-d:不进入容器
-i:在新容器内指定一个伪终端或终端。
-t:允许你对容器内的标准输入 (STDIN) 进行交互。
-P:是容器内部端口随机映射到主机的高端口。
-c:待完成命令
-p: 是容器内部端口绑定到指定的主机端口
- 绑定端口:5001:5000
- 绑定ip地址:127.0.0.1:5001:5000
- UDP 端口:127.0.0.1:5000:5000/udp
- 查看所有容器
runoob@runoob:~$ docker ps -a
CONTAINER ID IMAGE COMMAND ...
5917eac21c36 ubuntu:15.10 "/bin/sh -c 'while t…" ...
无参:查看运行中容器
-a:查看所有容器
-l:查询最后一次创建的容器
- 查看容器内的标准输出:
runoob@runoob:~$ docker logs 2b1b7a428627
-f: 让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出。
- 停止容器
runoob@runoob:~$ docker stop 2b1b7a428627
- 启动容器
$ docker start b750bbbcfd88
- 重启容器
$ docker restart <容器 ID>
- 进入容器
$ docker attach 5026c9ed27b8
- 不停止退出容器
docker exec -it 5026c9ed27b8 /bin/bash
- 导出容器
$ docker export 5026c9ed27b8 > ubuntu.tar
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
- 导入容器快照
$ cat ./ubuntu.tar | docker import - ubuntu
将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
通过指定 URL 或者某个目录来导入
$ docker import http://example.com/exampleimage.tgz example/imagerepo
- 删除容器
$ docker rm -f 5026c9ed27b8
-f:强制删除,无论什么状态
- 运行一个 web 应用
runoob@runoob:~# docker run -d -P training/webapp python app.py
python app.py:容器内运行命令
- 查看指定容器端口映射
runoob@runoob:~$ docker port bf08b7f2cd89
- 查看容器的进程
runoob@runoob:~$ docker top wizardly_chandrasekhar
- 检查 WEB 应用程序
runoob@runoob:~$ docker inspect wizardly_chandrasekhar
- 新建网络
$ docker network create -d bridge test-net
- 查看网络
镜像
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。
- 列出镜像列表
docker images
- 获取一个新的镜像
Crunoob@runoob:~$ docker pull ubuntu:13.10
- 查找镜像
runoob@runoob:~$ docker search httpd
- 删除镜像
$ docker rmi hello-world
- 创建镜像
1. 从已经创建的容器中更新镜像,并且提交这个镜像
在运行的容器内使用 apt-get update 命令进行更新。
在完成操作之后,输入 exit 命令来退出这个容器。
此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。
runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2
- m: 提交的描述信息
- a: 指定镜像作者
- e218edb10161:容器 ID
- runoob/ubuntu:v2: 指定要创建的目标镜像名
- 使用 Dockerfile 指令来创建一个新的镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
runoob@runoob:~$ cat Dockerfile
FROM centos:6.7
MAINTAINER Fisher "fisher@sudops.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像
runoob@runoob:~$ docker build -t runoob/centos:6.7 .
Sending build context to Docker daemon 17.92 kB
Step 1 : FROM centos:6.7
---> d95b5ca17cc3
Step 2 : MAINTAINER Fisher "fisher@sudops.com"
---> Using cache
---> 0c92299c6f03
Step 3 : RUN /bin/echo 'root:123456' |chpasswd
---> Using cache
---> 0397ce2fbd0a
Step 4 : RUN useradd runoob
......
- -t :指定要创建的目标镜像名
- . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
- 设置镜像标签
runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。