试验 Docker 和 OpenShift

如今,容器是 IT 的热门话题。 Docker 是目前最流行的创建和使用容器的方式之一。 如果你想用 Docker 沾沾自喜,你可以很容易地做到这一点 Fedora. 该过程的一部分是将 Docker 映像部署到注册表。 您可以使用 OpenShift 来执行此操作。 令人惊讶的是,您甚至不需要使用在线服务(无论是否免费)来试验这个过程。

本文档介绍了在您自己的系统上使用 Docker 和 OpenShift 的初始步骤。

先决条件

如何安装Docker Fedora,运行以下命令:

sudo dnf -y install docker
sudo systemctl enable docker

有关这些步骤的更多信息,请参阅 这 Fedora 开发者门户.

接下来,安装 OpenShift:

sudo dnf -y install origin docker-registry

配置 Docker 以使用 OpenShift

要将 OpenShift 与 Docker 一起运行,请修改 /etc/sysconfig/docker 文件。

一种方法是允许 INSECURE_REGISTRY 选项并添加 OpenShift 使用的 IP 地址。 这告诉 Docker 忽略注册表的安全性。 尽管以这种方式配置守护程序很容易,但它是不安全的。 如果您运行 Docker 守护程序或设置注册表用于个人测试以外的任何内容,则不建议使用此过程。

$ cat /etc/sysconfig/docker | grep INSECURE
# adding the registry to the INSECURE_REGISTRY line and uncommenting it.
INSECURE_REGISTRY='--insecure-registry 172.30.0.0/16'

在 systemd 中启用 Docker

要启用 Docker 守护程序,请运行以下命令:

sudo systemctl daemon-reload
sudo systemctl restart docker

Docker 应该开始运行。 使用 systemctl 检查其状态:

sudo systemctl status docker

您应该会看到与此类似的结果:

● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2016-11-07 15:11:41 CET; 20s ago
Docs: https://docs.docker.com
Main PID: 2769 (docker-current)
Tasks: 9
CGroup: /system.slice/docker.service
└─2769 /usr/bin/docker-current daemon --exec-opt native.cgroupdriver=systemd --selinux-enabled --log-driver=journald --insecure-registry 172.30.0.0
Nov 08 14:01:19 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:19.310721481+01:00" level=info msg="[graphdriver] using prior storage driver "devicemapper""
Nov 08 14:01:19 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:19.314271045+01:00" level=info msg="Graph migration to content-addressability took 0.00 seconds"
Nov 08 14:01:19 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:19.327088702+01:00" level=info msg="Firewalld running: true"
Nov 08 14:01:20 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:20.780845664+01:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/16.
Nov 08 14:01:21 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:21.937088251+01:00" level=info msg="Loading containers: start."
Nov 08 14:01:21 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:21.937291016+01:00" level=info msg="Loading containers: done."
Nov 08 14:01:21 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:21.937406091+01:00" level=info msg="Daemon has completed initialization"
Nov 08 14:01:21 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:21.937513606+01:00" level=info msg="Docker daemon" commit="e03ddb8/1.10.3" execdriver=native-0.2 graphdrive
Nov 08 14:01:21 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
Nov 08 14:01:21 localhost.localdomain docker-current[2013]: time="2016-11-08T14:01:21.956150356+01:00" level=info msg="API listen on /var/run/docker.sock"

启动 OpenShift

要启动 OpenShift,请运行以下命令:

sudo oc cluster up

您应该会看到与此类似的结果:

-- Checking OpenShift client ... OK
-- Checking Docker client ... OK
-- Checking Docker version ... OK
-- Checking for existing OpenShift container ... OK
-- Checking for openshift/origin:v1.3.1 image ... OK
-- Checking Docker daemon configuration ... OK
-- Checking for available ports ...
WARNING: Binding DNS on port 8053 instead of 53, which may be not be resolvable from all clients.
-- Checking type of volume mount ...
Using nsenter mounter for OpenShift volumes
-- Creating host directories ... OK
-- Finding server IP ...
Using 10.34.4.161 as the server IP
-- Starting OpenShift container ...
Creating initial OpenShift configuration
Starting OpenShift using container 'origin'
Waiting for API server to start listening
OpenShift server started
-- Installing registry ... OK
-- Installing router ... OK
-- Importing image streams ... OK
-- Importing templates ... OK
-- Login to server ... OK
-- Creating initial project "myproject" ... OK
-- Server Information ...
OpenShift server started.
The server is accessible via web console at:
https://10.34.4.161:8443
You are logged in as:
User:     developer
Password: developer

要以管理员身份登录,请运行以下命令:

oc login -u system -p admin

使用默认服务器和不安全的连接。 (也可以使用这些选项进行进一步的登录。)现在,Docker 和 OpenShift 都已正确安装并运行。

创建一个泊坞窗图像

让我们创建一个简单的“helloworld”容器。 首先创建一个名为 docker-hello-world 的目录:

mkdir ~/docker-hello-world
cd ~/docker-hello-world/

现在在目录中创建一个名为 Dockerfile 的文件,其内容如下:

FROM fedora:24
MAINTAINER "Petr Hracek" [email protected]
CMD [ "/bin/echo" "hello world" ]

构建图像

要构建 helloworld docker 容器,请运行以下命令:

sudo docker build -t helloworld:0.1 .

输出应该与此类似:

Sending build context to Docker daemon 2.048 kB
Step 1 : FROM fedora:24
Trying to pull repository docker.io/library/fedora ...
24: Pulling from docker.io/library/fedora
2bf01635e2a0: Pull complete
Digest: sha256:64a02df6aac27d1200c2572fe4b9949f1970d05f74d367ce4af994ba5dc3669e
Status: Downloaded newer image for docker.io/fedora:24
---> 11a5107645d4
Step 2 : MAINTAINER "Petr Hracek" [email protected]
---> Running in 5eb304ac9b65
---> 7b1559495b5e
Removing intermediate container 5eb304ac9b65
Step 3 : CMD /bin/echo 'hello world'
---> Running in 9cafe8c3e6af
---> 92282096ce32
Removing intermediate container 9cafe8c3e6af
Successfully built 92282096ce32

最后,您应该会看到构建成功。 遇到问题请参考 这个方便的最佳实践文档.

将图像标记到本地存储库

获取图像 ID, 在本地 docker 存储库中运行此命令:

sudo docker images

输出应该与此类似:

REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE
helloworld                                   0.1                 92282096ce32        8 minutes ago       204.4 MB
docker.io/openshift/origin-deployer          v1.3.0              5bf464732ca8        7 weeks ago         487.1 MB
docker.io/openshift/origin-docker-registry   v1.3.0              59d447094a3c        7 weeks ago         345.5 MB
docker.io/openshift/origin-haproxy-router    v1.3.0              e33d4e33dffb        7 weeks ago         506.2 MB
docker.io/openshift/origin                   v1.3.0              7b24611e640f        7 weeks ago         487.1 MB
docker.io/openshift/origin-pod               v1.3.0              35873f68181d        7 weeks ago         1.591 MB
docker.io/fedora                             24                  11a5107645d4        12 weeks ago        204.4 MB

现在,使用输出中的 IMAGE ID 标记 docker 映像并将其推送到本地存储库:

sudo docker tag 92282096ce32 localhost.localdomain:5000/my-helloworld

验证 helloworld 容器是否已标记在本地 docker 存储库中。 IMAGE ID 标签必须相同。

sudo docker images

输出:

REPOSITORY                                   TAG                 IMAGE ID            CREATED             SIZE
helloworld                                   0.1                 92282096ce32        12 minutes ago      204.4 MB
localhost.localdomain:5000/my-helloworld     latest              92282096ce32        12 minutes ago      204.4 MB
docker.io/openshift/origin-deployer          v1.3.0              5bf464732ca8        7 weeks ago         487.1 MB
docker.io/openshift/origin-docker-registry   v1.3.0              59d447094a3c        7 weeks ago         345.5 MB
docker.io/openshift/origin-haproxy-router    v1.3.0              e33d4e33dffb        7 weeks ago         506.2 MB
docker.io/openshift/origin                   v1.3.0              7b24611e640f        7 weeks ago         487.1 MB
docker.io/openshift/origin-pod               v1.3.0              35873f68181d        7 weeks ago         1.591 MB
docker.io/fedora                             24                  11a5107645d4        12 weeks ago        204.4 MB

将 docker 映像添加到 OpenShift

您可以使用这两种方法中的任何一种将 Docker 映像导入 OpenShift。

作为图像添加到 OpenShift

首先,以 developer 身份登录到您的 OpenShift 存储库并输入密码 developer. 您之前从 oc cluster up 命令获得了密码。

sudo oc login -u developer

然后运行这个命令:

sudo oc new-app helloworld:latest

添加到 OpenShift docker-registry

您可以直接访问 OpenShift Origin 的内部注册表以推送或拉取映像。 这有助于 通过手动推送图片创建图片流,或者只是直接 docker pull 一个图像。

在将 docker 映像添加到 OpenShift 之前需要两个步骤。 首先是使用用户名/密码对系统登录:admin 第二个是获取注册中心IP,这是强制性的。
使用以下命令登录:

sudo oc login -u system -p admin

要验证您是否已登录 OpenShift 实例,请运行以下命令:

sudo oc whoami

你应该看到:

system:admin

要获取 docker-registry IP,请运行以下命令:

sudo oc get svc -n default | grep docker-registry

输出应该与此类似:

docker-registry   172.30.210.244   <none>        5000/TCP                  38m

现在,以开发者身份登录:

sudo oc login -u developer

要将本地 docker 映像推送到 Origin docker-registry,请运行以下命令:

sudo docker login -u developer -p $(sudo oc whoami -t) -e <email> 172.30.210.244:5000

现在,让我们标记 docker 图像:

sudo docker tag localhost.localdomain:5000/my-helloworld 172.30.210.244:5000/myproject/my-helloworld

要将 docker 映像推送到 OpenShift docker-registry,请运行:

sudo docker push 172.30.210.244:5000/myproject/my-helloworld

要验证上一个任务是否成功,请运行:

sudo oc get is

输出应如下所示:

NAME           DOCKER REPO                                  TAGS    UPDATED
my-helloworld  172.30.210.244:5000/myproject/my-helloworld  latest  5 seconds ago

要在 OpenShift 上部署 docker 映像,请运行:

sudo oc new-app my-helloworld:latest --name=my-helloworld

从 OpenShift 项目中删除图像

要从名为 myproject 的 Openshift 项目中删除映像,请运行以下命令:

sudo oc delete dc my-helloworld -n myproject

存储经过验证的容器映像

如果您验证了容器镜像并且想要共享它,请在 容器图像 Github 存储库.

进一步阅读

欲了解更多信息,请查看 GitHub – openshift/origin:面向开发人员的企业级 Kubernetes.