您的位置:首页 > 运维架构 > Docker

Docker入门实战(一)——Docker常用命令

2016-08-20 11:46 801 查看


什么是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 容器名


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: