如今,容器是 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.