Docker:创建第一个容器

 一、Docker安装测试

要想让Docker良好运行起来,最好你的操作系统是64位的,内核版本不低于3.10,所以最好直接使用CentOS7系列的系统,当然你也可以使用debian之类的系统。我这里就以CentOS7为例了,具体各个系统docker的相关安装方法这里不作介绍,具体安装参考官档

Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月,有点类似于ubuntu的版本发布方式。企业版自然会提供一些额外的服务,当然肯定也是收费的。企业版说明:https://blog.docker.com/2017/03/docker-enterprise-edition

社区版分为stable和edge两种发布方式。

stable版本是季度发布方式,比如17.03, 17.06, 17.09

edge版本是月份发布方式, 比如17.03, 17.04……

1.1 系统版本

[root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# uname -r 3.10.0-693.el7.x86_64

1.2 安装Docker

1)Docker命令工具需要root权限才能工作,你可以将你的用户放入docker组来避免每次都要使用sudo。

2)添加YUM源。

# tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF

 注意:2020年3月31日,Docker将关闭托管在“ dockerproject.org”和“ dockerproject.com”上的APT和YUM存储库。

使用以下方法设置稳定的存储库

yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

3)安装Docker

$ yum install docker-engine

4)启动Docker

# systemctl enable docker.service 
# systemctl start docker

5)查看Dcoker版本

# docker version
Client:
 Version:      17.05.0-ce
 API version:  1.29
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.05.0-ce
 API version:  1.29 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   89658be
 Built:        Thu May  4 22:06:25 2017
 OS/Arch:      linux/amd64
 Experimental: false

6)运行测试Dcoker

# docker run --rm hello-world

  

二、Docker创建一个WordPress容器

Docker HUB : Docker镜像首页,包括官方镜像和其它公开镜像。这个公共registry上有你需要的几乎所有东西的镜像:Ubuntu、Fedora、Postgresql、MySQL、Jenkins、Elasticsearch、Redis等等。Docker开发人员在这个公共registry里维护着数个镜像,不过你能从上面拉取大量来自用户发布的自建镜像。

因为国情的原因,国内下载Docker HUB官方的相关镜像比较慢,可以使用阿里云镜像加速器,但需要有一个阿里云账号就可以获得一个专属加速器,比如https://zjbap5fx.mirror.aliyuncs.com;至于加速器怎么使用,阿里云都有说明。另外可能你需要或想要一个私有的registry(用于开发应用之类的容器),有好几个方式可以设置自己的私有registry,当然你也可以买一个。

下面我们以搭建一个WordPress为例开始Docker之旅。

第一步:搜索镜像(search)

$ docker search wordpress
NAME                          DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
wordpress                     The WordPress rich content management syst...   1329      [OK]

第二步:下载镜像(pull)

从公共registry下载一个镜像:

$ docker pull wordpress

WordPress启动还需要MySQL,所以我们还需要下载一个MySQL。

$ docker pull mysql

第三步:查看自己的镜像(images)

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
wordpress           latest              368db5c51bcd        4 days ago          420 MB
mysql               latest              cf725f136fd2        4 days ago          383.4 MB
nginx               latest              e43d811ce2f4        4 days ago          181.4 MB
ubuntu              latest              f753707788c5        12 days ago         127.1 MB
hello-world         latest              c54a2cc56cbb        3 months ago        1.848 kB

  

第四步:启动一个WordPress容器(run)

* 需要先启动MySQL容器

$ docker run --name mysql_wordpress -e MYSQL_ROOT_PASSWORD=wordpress -d mysql
75648d50943e7529628002f42efd01124c8338449d25be1fb58be5be056d2c0b

--name:给此容器指定一个名称。

-e MYSQL_ROOT_PASSWORD:指定环境变量参数,如MySQL的root用户密码设定。

-d:表示丢在后台运行。

容器启动后,输出的是分配的ID,因为是随机的,你的将有所不同。另外对于mysql容器还提供了很多变量,可以使用 docker exec mysql env查看。

第五步:* 然后启动WordPress容器

$ docker run --name docker_wordpress --link mysql_wordpress:mysql -p 8080:80 -d wordpress
189b414ce5111f373fd0ae96a6465e09430a0bef7c40da166ed52aea9cb6a577

WordPress容器运行参数解释:

--name:给此容器指定一个名称。

--link:指定需要关联的MySQL容器,并指定一个别名,这里的别名必须为mysql,不然环境变量的名称就会改变。

-p:指定此容器的端口,默认是80;这里映射为8080了。

-d:表示丢在后台运行。

-e WORDPRESS_DB_USER:指定的一些环境参数,缺省连接DB的用户为“root”。

-e WORDPRESS_DB_PASSWORD:指定的一些环境参数,缺省连接root用户的密码为连接MySQL容器的环境变量MYSQL_ROOT_PASSWORD的值。

-e WORDPRESS_DB_NAME:指定的一些环境参数,缺省库为 “wordpress”。

还有一些不常用的如:

-e WORDPRESS_AUTH_KEY
-e WORDPRESS_SECURE_AUTH_KEY
-e WORDPRESS_LOGGED_IN_KEY
-e WORDPRESS_NONCE_KEY
-e WORDPRESS_AUTH_SALT
-e WORDPRESS_SECURE_AUTH_SALT
-e WORDPRESS_LOGGED_IN_SALT
-e WORDPRESS_NONCE_SALT

这些变量都是在WordPress这个镜像中定义好的,某个地方引用某个变量都是定义好的,所以这里只需要传入对应的值即可。这里可能会考虑,目标容器link到源容器时是怎么获取源容器的连接信息呢?这就涉及到容器间link的机制,具体博客有说明。

接下来就可以在浏览器中输入http://localhost:8080进行wordpress的配置了。

第六步:列出当前正在运行的docker容器(ps)

$ docker ps
CONTAINER ID     IMAGE          COMMAND                  CREATED             STATUS              PORTS                  NAMES
189b414ce511     wordpress      "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:8080->80/tcp   docker_wordpress
75648d50943e     mysql          "docker-entrypoint.sh"   About an hour ago   Up About an hour    3306/tcp               mysql_wordpress

列出当前系统所有的容器

$ docker ps -a

第七步:进入到一个docker容器(exec)

$ docker exec -ti docker_wordpress /bin/bash
root@189b414ce511:/var/www/html#

  

三、Docker创建一个Ubuntu容器 首先确认我本地是有Ubuntu镜像的。

$ docker images ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              f753707788c5        12 days ago         127.1 MB

然后我们来创建一个Ubuntu容器。

$ docker run --rm -it ubuntu /bin/bash
root@32cb81d2683d:/# echo "first docker container"
first docker container

参数解释

run:运行一个容器。

–rm:告诉Docker一旦运行的进程退出就删除容器,这在进行测试时非常有用,可免除杂乱。

-ti:告诉Docker分配一个伪终端(-t,tty)并进入交互模式(-i,interactive),这将进入到容器内,对于快速原型开发或尝试很有用,但不要在生产容器中打开这些标志。

ubuntu:这是容器立足的镜像。

/bin/bash:要运行的命令,因为我们以交互模式启动,它将显示一个容器的提示符。

在运行run命令时,你可指定链接、卷、端口、窗口名称(如果你没提供,Docker将分配一个默认名称)等等。

PS:ubuntu会有多个版本,通过指定tag来启动特定的版本[image]:[tag]。

posted @ 2018-04-08 16:35  Gringer  阅读(1742)  评论(0)    收藏  举报