美文网首页
docker 的容器 (三)

docker 的容器 (三)

作者: 求知久久编程学院 | 来源:发表于2021-01-21 11:28 被阅读0次

    1. 介绍

    上一篇:docker的镜像和镜像源加速(二)

    之前我们下载了hello-world这个镜像,现在把它运行起来。

    使用docker run命令。

    比如:

    $ docker run hello-world
    

    主要是输出一些文本信息,然后就退出了。

    使用docker ps可以查看容器的进程。

    不过是空的,因为一运行就退出,只是输出信息,输出完就结束了。

    可以使用docker ps -a来查看退出过的进程。

    比如:

    $ docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
    b25a96c17bf4        hello-world         "/hello"            About a minute ago   Exited (0) About a minute ago                       mystifying_saha
    

    2. 运行容器

    上面只是演示hello world而已,我们运行些有用点的容器。

    比如:

    $ docker run -it ubuntu bash
    

    运行的是ubuntu这个镜像,如果你的系统上没有这个镜像,会先下载下来。

    bash是表示进入那个ubuntu的镜像的容器的shell,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。

    这样就相当于进入了另一台ubuntu。

    而且这个ubuntu跟你原来的系统是隔离的。

    这样也没多大意义,我们经常会用docker来跑一些服务,比如web服务。

    那就运行一个nginx容器试试。

    $ docker run -d -p 80:80 --name webserver nginx
    

    镜像名称是nginx--name表示为这个容器取个名称叫webserver

    运行之后,你用docker ps查看一下容器。

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
    a1d4b615709b        nginx               "nginx -g 'daemon ..."   5 seconds ago       Up 4 seconds        0.0.0.0:80->80/tcp, 443/tcp   webserver
    

    然后你可以使用curl http://127.0.0.1查看一下,是否运行了nginx服务。

    使用docker stop命令可以停止这个容器的运行。

    比如:

    $ docker stop webserver
    

    停止之后输入docker ps发现是空的,这个时候要输入docker ps -a才能查看退出的容器。

    可以使用下面这条命令,清除所有已退出的容器。

    $ docker rm -f $(docker ps -a | grep Exit | awk '{ print $1 }')
    

    之前运行nginx容器的时候,有使用-p 80:80这个参数。

    这个表示端口映射。

    解释前,我们先来改一下。

    $ docker run -d -p 8080:80 --name webserver nginx
    

    查看一下运行状态:

    $ docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                           NAMES
    45e47ed889f8        nginx               "nginx -g 'daemon ..."   4 seconds ago       Up 3 seconds        443/tcp, 0.0.0.0:8080->80/tcp   webserver
    

    现在你可以需要使用curl http://127.0.0.1:8080才能访问了。

    也就是说,-p参数中,第一个端口是暴露在外面的端口,外面可以访问的端口。

    至于-d嘛,就是以守护态运行。

    有些应用根本就不需要暴露接口在外面,比如下面这个:

    $ docker ps
    mposenginx_gitlab_1
    7e4493b736d2        sameersbn/postgresql:9.5-4   "/sbin/entrypoint.sh"    2 days ago          Up 2 days           5432/tcp                                                gitlabcomposenginx_postgresql_1
    8cd6c90f9a52        sameersbn/redis:latest       "/sbin/entrypoint.sh "   2 days ago          Up 2 days           6379/tcp
    

    这两个端口在外部是无法访问的,没有绑定在0.0.0.0这个ip上,这个有什么用呢。

    其实有个参数是--link,供单机的容器之间打通一个网络通道,这样不必通过ip来访问,而是一个别名。

    比如,先运行两个容器:

    $ docker run --name gitlab-postgresql -d \
        --env 'DB_NAME=gitlabhq_production' \
        --env 'DB_USER=gitlab' --env 'DB_PASS=password' \
        --env 'DB_EXTENSION=pg_trgm' \
        --volume /srv/docker/gitlab/postgresql:/var/lib/postgresql \
        sameersbn/postgresql:9.6-2
    
    $ docker run --name gitlab-redis -d \
        --volume /srv/docker/gitlab/redis:/var/lib/redis \
        sameersbn/redis:latest
    

    这两个容器有两个名称,分别是gitlab-postgresqlgitlab-redis

    然后再启动一个暴露接口的容器,去连接这两个容器。

    $ docker run --name gitlab -d \
        --link gitlab-postgresql:postgresql --link gitlab-redis:redisio \
        --publish 10022:22 --publish 10080:80 \
        --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' \
        --env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string' \
        --env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string' \
        --env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string' \
        --volume /srv/docker/gitlab/gitlab:/home/git/data \
        sameersbn/gitlab:8.16.6
    

    其中postgresqlredisio是容器的主机别名。

    使用docker restart命令可以重启容器。

    还有一个参数比较常用,就是-rm,这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm 。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 –rm 可以避免浪费空间。

    完结。

    下一篇: 理解docker镜像的层叠结构(四)

    相关文章

      网友评论

          本文标题:docker 的容器 (三)

          本文链接:https://www.haomeiwen.com/subject/jevrzktx.html