Docker 包括三个基本概念:
- 镜像(image):相当于一个root文件系统。
- 容器(Container):镜像和容器的关系就像面向对象的类和实体的关系。镜像是静态的定义,容器是运行的实体。
- 仓库(Repository):仓库可以看成一个代码控制中心,用来保存镜像。
Docker 使用
镜像使用
列出镜像列表
$ docker images
同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本。我们使用 REPOSITORY:TAG 来定义不同的镜像。
例如,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:
$ docker run -t -i ubuntu:15.10 /bin/bash
root@d77ccb2e5cca:/#
参数说明:
-i
交互式操作;
-t
: 终端;
ubuntu:15.10
: 镜像:版本;
/bin/bash
:命令。
获取一个新的镜像
$ docker pull ubuntu:13.10
查找镜像
$ docker search httpd
删除镜像
$ docker rmi hello-world
创建镜像(Dokerfile)
创建一个 Dockerfile
文件,其中包含一组指令来告诉 Docker
如何构建我们的镜像。
$ 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 命令来构建一个镜像。
构建镜像
$ docker build -t runoob/centos:6.7 .
参数说明:
-t
:指定要创建的目标镜像名
.
:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
$ docker images # 查看创建的镜像已经在列表中存在,我们可以使用新的镜像来创建容器。
设置镜像标签
$ docker tag <镜像 ID> runoob/centos:dev
docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)
容器使用
启动容器
$ docker run -it ubuntu /bin/bash
参数说明
-t
: 在新容器内指定一个伪终端或终端;
-i
: 允许你对容器内的标准输入 (STDIN) 进行交互;
ubuntu
: ubuntu 镜像;
/bin/bash
:放在镜像名后的是命令。
退出终端,直接输入 exit:
root@ed09e4490c57:/# exit
启动已停止运行的容器
查看所有的容器
$ docker ps -a
使用 docker start 启动一个已停止的容器
$ docker start <容器 ID>
后台运行
$ docker run -itd --name ubuntu-test ubuntu /bin/bash
注:加了 -d 参数默认不会进入容器。
停止一个容器
$ docker stop <容器 ID>
重启
$ docker restart <容器 ID>
进入容器
attach 命令
$ docker attach <容器 ID>
注: 如果从这个容器退出,会导致容器的停止。
exec 命令
$ docker exec -it <容器 ID> /bin/bash
注: 如果从这个容器退出,容器不会停止。
删除容器
$ docker rm -f <容器 ID>
容器连接
runoob@runoob:~$ docker run -d -p 5000:5000 training/webapp python app.py
33e4523d30aaf0258915c368e66e03b49535de0ef20317d3f639d40222ba6bc0
我们可以使用 -p
、-P
标识来指定容器端口绑定到主机端口。
参数说明
-p
: 是容器内部端口绑定到指定的主机端口。
-P
: 是容器内部端口随机映射到主机的高端口。