1、Overview
Docker Engine
Docker Engine is a client-server application with these major components:
- A server which is a type of long-running program called a daemon process (the dockerd command).
- A REST API which specifies interfaces that programs can use to talk to the daemon and instruct it what to do.
- A command line interface (CLI) client (the docker command).
Docker registries
A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker is configured to look for images on Docker Hub by default. You can even run your own private registry.
When you use the docker pull or docker run commands, the required images are pulled from your configured registry. When you use the docker push command, your image is pushed to your configured registry.
2、Install & Start
Install using the repository
Set up the repository
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
Install docker engine
yum install docker-ce docker-ce-cli containerd.io
Install from a package
Download the .rpm file from https://download.docker.com/linux/centos/xxx/x86_64/stable/Packages/
Start docker
systemctl start docker
Verify
docker version
docker info
Test
docker image pull hello-world
docker container run hello-world
3、Image
Docker把应用程序及其依赖,打包在image文件里面。只有通过这个文件,才能生成Docker容器。image文件可以看作是容器的模板。Docker根据image文件生成容器的实例。同一个image文件,可以生成多个同时运行的容器实例。
image是二进制文件。实际开发中,一个image文件往往通过继承另一个image文件,加上一些个性化设置而生成。举例来说,你可以在Ubuntu的image基础上,往里面加入Apache服务器,形成你的image。
列出本机的所有image文件
docker image ls
将image从仓库抓取到本地
docker image pull library/hello-world
library/hello-world是image文件在仓库里面的位置,其中library是image 文件所在的组,hello-world是image文件的名字。
由于Docker官方提供的image文件,都放在library组里面,所以它的是默认组,可以省略。
如果要拉取image with a specific tag:
docker pull centos:centos7
或者拉取全部images:
docker pull --all-tags centos
删除image文件
docker image rm hello-world
4、Container
image文件生成的容器实例,本身也是一个文件,称为容器文件。也就是说,一旦容器生成,就会同时存在两个文件:image文件和容器文件。而且关闭容器并不会删除容器文件,只是容器停止运行而已。
列出本机正在运行的容器
docker container ls
列出本机所有容器,包括终止运行的容器
docker container ls --all
终止运行的容器文件,依然会占据硬盘空间,可以使用 docker container rm 命令删除。
docker container rm [containerID]
docker container run命令会从image文件,生成一个正在运行的容器实例。
- docker container run命令具有自动抓取image文件的功能。如果发现本地没有指定的image文件,就会从仓库自动抓取。因此,前面的 docker image pull命令并不是必需的步骤。
- 也可以使用 docker container run命令的--rm参数,在容器终止运行后自动删除容器文件。
运行交互式的容器
docker container run -i -t ubuntu:15.10 /bin/bash
5、Creating images
当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用Dockerfile指令来创建一个新的镜像
Updating images
更新镜像之前,我们需要使用镜像来创建一个容器。
docker container run -it centos:centos7 /bin/bash
在运行的容器内进行更新,譬如 yum install -y vim。完成操作后,输入exit命令退出这个容器。
我们可以通过命令 docker commit来提交容器副本。
docker commit -m=”dev env” -a=”jinj” [containerID] jinj/centos7:v1
最后使用我们的新镜像jinj/centos7来启动一个容器
docker container run -it jinj/centos7:v1 /bin/bash
Building images
我们使用命令 docker build,从零开始来创建一个新的镜像。为此,我们需要创建一个Dockerfile文件,其中包含一组指令来告诉Docker如何构建我们的镜像。
# cat Dockerfile
FROM centos:centos7
RUN yum install -y vim
COPY .vim /root/.vim
COPY .vimrc /root/
使用命令 docker build来构建一个镜像。
docker build -t jinj/centos7:test .
使用新的镜像来创建容器。
docker container run -it --rm jinj/centos7:test /bin/bash
6、Migrating images
save & load
保存镜像:
docker save [imageID] > xxx.tar
导入镜像:
docker load < xxx.tar
打tag:
docker tag [imageID] jinj/centos7:test
export & import
从容器导出镜像:
docker export [containerID] > xxx.tar
导入镜像:
docker import xxx.tar
7、Volume
Volume本质上是容器与主机之间共享的目录或者文件,这样Volume中的数据可以在主机和容器中实时同步。
docker container run -it --rm --volume [host-dir]:[container-dir] jinj/centos7:test /bin/bash
8、Other Commands
docker container start
前面的 docker container run命令是新建容器,每运行一次,就会新建一个容器。同样的命令运行两次,就会生成两个一模一样的容器文件。如果希望重复使用容器,就要使用 docker container start命令,它用来启动已经生成、已经停止运行的容器文件。
docker container start [containerID]
docker container stop/kill
- docker container kill命令终止容器运行,相当于向容器里面的主进程发出SIGKILL信号;
- docker container stop命令也是用来终止容器运行,相当于向容器里面的主进程发出SIGTERM信号,然后过一段时间再发出SIGKILL信号。
docker container stop [containerID]
docker container kill [containerID]
docker container logs
docker container logs命令用来查看docker容器的输出,即容器里面Shell 的标准输出。如果 docker run命令运行容器的时候,没有使用-it参数,就要用这个命令查看输出。
docker container logs [containerID]
docker container exec
docker container exec命令用于进入一个正在运行的docker容器。如果 docker run命令运行容器的时候,没有使用-it参数,就要用这个命令进入容器。一旦进入了容器,就可以在容器的Shell执行命令了。
docker container exec -it [containerID] /bin/bash
docker container cp
docker container cp命令用于从正在运行的docker容器里面,将文件拷贝到本机。下面是拷贝到当前目录的写法。
docker container cp [containID]:[/path/to/file] .
docker search
我们可以从Docker Hub网站来搜索镜像,Docker Hub网址为:https://hub.docker.com/
docker search nginx
9、Links
- https://docs.docker.com/engine/install/centos/
- https://docs.docker.com/engine/reference/commandline/cli/
- https://www.runoob.com/docker/docker-tutorial.html
- https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
- http://www.ruanyifeng.com/blog/2018/02/docker-wordpress-tutorial.html