这里写图片描述

什么是Docker?

Docker containers wrap a piece of software in a complete filesystem that contains everything needed to run: code, runtime, system tools, system libraries – anything that can be installed on a server. This guarantees that the software will always run the same, regardless of its environment.

Docker容器是一个完整的文件系统,这个文件系统中包含了你的软件运行所需要的全部环境,如:软件的源码、运行环境、所需的软件等。也就是说,你的软件运行所需要的环境都包含在了Docker容器中,这样的话当你把代码部署到服务器上时就不需要考虑环境问题,只要服务器安装了Docker就能准确无误地运行你的软件。

Docker基本概念

镜像

镜像可以理解为一组指令的集合。这些指令确定你的软件运行所需要的环境,如确你需要什么操作系统、需要安装什么软件、需要执行什么命令。
当我们做完一个镜像后可以把它通过git的方式管理起来。

镜像仓库

镜像仓库用于存储同一镜像的不同版本。

容器

容器是镜像的运行实例,从使用者角度看它是一个完整的Linux系统。

Registry

Registry用于存储镜像仓库。Registry分为两种类型,一种是Docker官方提供的Registry,称为Docker Hub,它和Github一样,我们可以注册账号,并存储自己的镜像,也可以使用别人的镜像;另一种是自己搭建的Registry,由于Docker Hub是一个开源项目,因此我们可以把Docker Hub部署到我们的局域网中,从而拥有私有的Registry。

Docker常用命令

查看镜像

该命令会显示本地所有镜像:

docker images

结果如下:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
chai/tomcat8        0.0.1               4af46f004a15        4 days ago          1.197 GB
chaimm/tomcat8      0.0.1               4af46f004a15        4 days ago          1.197 GB
ubuntu              latest              f8d79ba03c00        8 days ago          126.4 MB
centos              latest              970633036444        3 weeks ago         196.7 MB

REPOSITORY:镜像仓库的名字
TAG:该镜像的版本号
IMAGE ID:镜像的ID
CREATED:创建时间
SIZE:镜像的大小

新建容器

方式一:

该命令会基于指定镜像创建一个新的容器:

docker run --name 容器名 -i -t 镜像名 /bin/bash

–name:为容器设置一个名字
-i -t:使得容器启动后能获取该容器的shell
镜像名:指定容器要基于哪一个镜像运行
最后一个参数是运行时需要需要执行的命令,这里执行/bin/bash使得容器运行后启动一个bash供我们和容器交互。

启动后结果如下:

[root@20fcdc5cdc57 local]# 

启动后我们将进入容器内部,获得一个用于和容器交互的shell,我们可以在这里对容器作任何操作,并且和操作一台Linux系统没有任何区别。

方式二:

docker run --name 容器名 -d 镜像名

上述命令将-i -t和/bin/bash换成了-d,从而可以使容器在后台运行,无交互式shell。
该命令执行后仅返回一个容器ID。

查看已创建的容器

docker ps -a

-a:能查看所有已经被创建的容器;不加这个参数仅会显示正在运行的容器。
执行结果如下:

CONTAINER ID        IMAGE                COMMAND             CREATED             STATUS                     PORTS               NAMES
20fcdc5cdc57        chai/tomcat8:0.0.1   "/bin/bash"         4 days ago          Exited (0) 6 minutes ago                       tomcat8
d89068a849bd        centos               "/bin/bash"         4 days ago          Exited (0) 4 days ago                          high_ride

CONTAINER ID:该容器的ID
IMAGE:该容器使用的镜像
COMMAND:启动时执行的命令
CREATED:容器创建时间
STATUS:当前运行状态
PORTS:该容器所开启的端口号
NAMES:容器的名字

启动已创建的容器

docker start 容器名

该命令执行后容器会在后台运行,只返回一个容器ID,若需要获取容器交互式shell,需要继续执行如下命令:

docker attach 容器名

在容器内执行命令

要在容器内执行命令有两种情况:
情况一:如果你已经进入容器内部,并获取了容器的shell,那么就执行执行命令即可;
情况二:如果容器在后台运行,那么你可以通过docker exec命令直接在宿主机上执行某个容器的命令,该命令的用法如下:

docker exec [参数] 容器名 命令

上述命令会在指定的容器中执行指定的命令。
如果你的命令无需交互,那么需要在参数部分加上-d,使得该命令在容器后台执行即可;
如果你的命令在执行过程中需要用户输入,那么需要在参数部分加上-i -t,并使用命令:/bin/bash,从而你就能进入容器内部,获取一个交互式的shell。

停止容器

方式一:

当你在容器内部,只要执行exit命令即可停止并退出容器。

方式二:

当容器处于后台运行的状态,你需要通过如下命令停止容器:

docker stop 容器名

获取容器参数

docker inspect 容器名

上述指令可以查看指定容器的所有配置信息,这些信息以JSON的形式返回,如下:

[
    {
        "Id": "20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b",
        "Created": "2016-08-15T13:45:50.99616017Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2016-08-20T02:50:13.565344395Z",
            "FinishedAt": "2016-08-20T02:51:31.574303352Z"
        },
        "Image": "sha256:4af46f004a1542f94b6a4178d1af7eaa896e45bcfaf1fd1955a6c08a36670c0d",
        "ResolvConfPath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/hostname",
        "HostsPath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/hosts",
        "LogPath": "/var/lib/docker/containers/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b/20fcdc5cdc577460fb58bfe76eff743f176cfabbcbf4942401dc7aa35031a56b-json.log",
        "Name": "/tomcat8",
        "RestartCount": 0,
        "Driver": "aufs",
……………………

如果你只需要查看其中某个信息,可以使用-f或–format参数指定:

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名

删除容器

docker rm 容器名

这里写图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐