拉取镜像:

上篇文章 Docker入门安装教程 中讲了Docker最重要的一部分就是就是Docker镜像,我们所有的容器都是基于Docker镜像来创建的,这样才能保证所有同一个镜像创建出来的容器是一模一样的。而我们的容器则放在仓库中,Docker Hub就是一个官方公开的仓库,里面有非常多的镜像。我们可以直接使用官方仓库中的镜像来创建容器,下面我们就来创建一个nginx容器。

  1. 使用docker search nginx命令来搜索镜像,可以看到搜索出来非常多的结果,注意,OFFICIAL那栏标记OK的就表示这个镜像是nginx官方制作的镜像。
    clipboard.png
  2. 也可以直接到 Docker Hub 上去搜索镜像,可以更直观的看到镜像的信息。比如这里就提供了该镜像在Github上存放的对应不同的tagDockerfile文件,Dockerfile文件就是用来生成镜像用的,后续再讲怎么使用。一个tag就代表一个版本的镜像,因为nginx也有很多不同的版本,在拉取镜像的时候可以指定版本,如果没指定则默认拉取latest版本的镜像。
    clipboard.png
  3. 下面使用docker pull命令拉取tag1.15.8nginx镜像。下载会需要一点时间,然后使用docker images命令来查看本地存在的镜像,发现已经有一个tag1.15.8nginx镜像了。

运行容器:

clipboard.png

  1. 使用这个镜像运行起一个容器,运行docker run -d -p 9500:80 --name nginx nginx:1.15.8,对外映射的端口是9500,这里先不探究这些命令参数的含义,后续再细讲。使用docker ps命令来查看运行的容器,发现有一个名为nginx的容器,试着访问下,是可以成功打开nginx的主页。到现在为止我们已经成功的在官方仓库拉取一个镜像并通过镜像来运行起了一个容器。

    clipboard.png

    clipboard.png

运行Docker容器:

在拉取了Docker镜像之后我们可以使用docker run [镜像名:tag]命令来运行一个容器,这个命令后面可以添加参数来进行不同的操作,这里只简单介绍下上面用到的。

  1. -p 9500:80
    这个参数的含义就是把容器的80端口映射到宿主机的9500端口,这样访问宿主机的9500端口就可以访问到nginx所在的容器了。
  2. --name nginx
    为这个容器起一个名字。
  3. -d
    后台运行。

Docker容器和宿主机共享数据:

因为容器是随时可以抛弃的,但是例如nginxmysql这类需要存放数据的容器如果直接抛弃了旧的容器使用新的容器就会造成原来的数据丢失,所以就需要让这类容器的数据是和宿主机的某个目录下共享的,这样即使就容器删除了,新的容器只要指定数据的使用路径依旧可以使用旧容器的数据。只需要在运行容器时使用-v参数即可。

  1. 使用这条命令运行容器时,会将容器这个目录下的数据共享到宿主机/var/lib/docker/volumes/目录下,会自动生成一个随机目录。

    docker run -d -p 9500:80 -v /etc/nginx/html --name nginx nginx:1.15.8
  2. 可以使用docker inspect nginxdocker inspect --format={{.Mounts}} nginx命令来查看随机挂载到了宿主机哪个目录
    clipboard.png
  3. 如果不想使用随机目录,也可以自己指定目录,使用冒号隔开即可,前面的是宿主机的目录,后面是容器的目录。

    docker run -d -p 9500:80 -v  /usr/local/half/nginx/html:/etc/nginx/html --name nginx nginx:1.15.8

启动容器时使用自己的配置文件:

其实在镜像里面已经配置好了默认的配置文件路径,后续会讲到如何去查看这些配置路径。在nginx容器中配置文件的默认是/etc/nginx/nginx.conf,而在默认的配置文件里又讲页面的目录设置在了容器中的/etc/nginx/html中,所以其实可以使用上面的-v参数来使用自己的配置文件。

  1. 使用-v参数替换默认的配置文件,下面的命令中第一个-v参数是使用宿主机/usr/local/half/nginx/ nginx.conf来替换了默认的配置文件,这是我提前创建好的一个nginx配置文件。在那里面我指定了将/etc/nginx/html目录作为页面的根目录,而第二个-v命令则是把这个目录挂载到宿主机下的/usr/local/half/nginx/html目录,那里面有一个自定义的index.html文件。所以这样一来当我们再访问这个容器时会发现主页是跳转到自定义的页面上。

    docker run -d -p 9500:80 -v /usr/local/half/nginx/nginx.conf:/etc/nginx/nginx.conf -v /usr/local/half/nginx/html:/etc/nginx/html --name nginx nginx:1.15.8

    clipboard.png

  2. 而且因为我们把配置文件和存放页面的路径全都挂载在了宿主机的目录下,如果我们需要修改什么配置,只需要修改完之后再启动一个新的容器就可以了。

进入到容器内部:

因为镜像其实是根据Dockerfile构建出来的,官方的镜像也是如此,很多时候我们或许不清楚默认的配置路径,除了查文档和资料外还可以直接进入容器内部来查看。

  1. 运行docker exec -i -t nginx /bin/bash命令就可以进入到容器内部,我们会发现其实即使一个简化版的Linux系统,所以我们可以使用一些基本的Linux命令来查询各种想要知道的信息。

    clipboard.png

Dockerfile:

Dockerfile文件是专门用来创建镜像的,最开始Docker Hub页面上也提供了Dockerfile文件在Github上的路径,例如nginxDockerfile。我个人对Dockerfile的理解就是把所用的下载和各种路径的配置都按顺序写好在Dockerfile文件中,然后再使用它构建出镜像。其实上面使用的-v等命令都是对应着Dockerfile中不同的指令,只不过是以命令行的方式调用了,覆盖了Dockerfile中的指令配置。这里就不作详细说明,如果有想要了解的可以阅读<<第一本Docker书>>里面很详细的讲了Dockerfile的使用。

Docker常用命令:

  • 查看Docker信息,sudo docker info
  • 查看Docker镜像,sudo docker images
  • 查看Docker启动的容器,sudo docker ps
  • 查看Docker所有的容器,sudo docker ps -a
  • 删除Docker中某个容器,sudo docker rm [容器名字或id]
  • 删除Docker中所有的容器(查询出所有的容器id,传到rm命令中),sudo docker rm $(sudo docker ps -a -q)
  • 删除Docker中某个镜像,sudo docker rmi [镜像名字或id]
  • 强制删除Docker中某个镜像,sudo docker rmi -f [镜像名字或id]
  • 查找仓库中的镜像,sudo docker search [镜像名字]
  • 拉取仓库中的镜像,sudo docker pull [镜像名字]
  • 登录Docker Hub账号,sudo docker login
  • 推送镜像到Docker Hub仓库,sudo push [仓库/镜像名字:tag]

总结:

Docker在如今越来越流行,除了运维人员之外,后台开发也很有必要熟悉它,它可以极大的简化服务器的部署,本文只是粗略的介绍了基本使用,大家可以阅读<<第一本Docker书>>或者是官方文档等资料去了解更多更高级的功能。


Half
238 声望17 粉丝

The Long Way Round.