華工軟院IBM LinuxONE Community Cloud雲計算實驗文檔


此博文介紹華南理工大學軟件學院“雲計算開發與應用”實驗課。本人在大二期間選修了這門課,實驗課內容是把已有的app部署到雲服務器上運行。雖然實驗內容很簡單(作者大概一個小時就做完了兩天的實驗內容),但覺得這次實驗是我在華工期間做過的為數不多有意義的實驗之一,故作此博客記錄實驗詳細過程。此博客以linux環境為准。

實驗所需材料與環境配置:

本地環境:Manjaro 18.0.4 (kernel version: x86_64 Linux 5.0.15-1-MANJARO)。需先生成ssh密鑰對以便訪問服務器。需要安裝node.js。

雲服務器:IBM LinuxONE Community Cloud。登錄/注冊地址:https://linuxone.cloud.marist.edu/cloud/#/login

IBM賬戶(登錄/注冊地址:https://developer.ibm.com/linuxone/ ),一個自己的github賬號。

Day 1:

先到IBM LinuxONE Community Cloud注冊賬號。因為是人工審核,所以注冊流程比想象中要久一些。登錄之后就可以看到這樣的界面:

我們不着急去創建實例,先去右上角的個人用戶設置,把本地生成的id_rsa.pub公鑰文件上傳上去。(什么你告訴我你不會?還不趕緊學?)

新創建的賬戶最上方不會有Containers的選項,不用管。點擊Virtual Server就可以看到下面的界面,右邊的Quota顯示我們最多只能創建一個vm實例。點擊黃色的Create按鈕,來創建我們第一個vm實例。

點擊Create之后稍等一會(可能有點久,要手動刷新一下),就可以看到我們的vm已經准備就緒了。

啟動terminal,ssh linux1@ip連接到我們的vm實例。

ssh linux1@148.100.244.30
The authenticity of host '148.100.244.30 (148.100.244.30)' can't be established.
ECDSA key fingerprint is SHA256:JPXviVE88jNGDCGvyFFg1iVyQ1fngC6V78pqJCsKCrg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '148.100.244.30' (ECDSA) to the list of known hosts.
==============================================================================
Welcome to IBM LinuxONE Community Cloud!

This server is for authorized users only. All activity is logged and monitored.
Individuals using this server must abide to the Terms and Conditions listed here:
https://developer.ibm.com/linuxone/terms-of-use/
Your access will be revoked for any non-compliance.
=============================================================================
View Code

第一個實驗是把已有的app(Github Repo: https://github.com/IBM/Cloud-Native-Workloads-on-LinuxONE)部署到雲服務器上,通過docker來運行。輸入以下內容:

1 sudo su
2 cd ~
3 wget ftp://ftp.unicamp.br/pub/linuxpatch/s390x/redhat/rhel7.3/docker-17.05.0-ce-rhel7.3-20170523.tar.gz
4 tar -xzvf docker-17.05.0-ce-rhel7.3-20170523.tar.gz
5 cp docker-17.05.0-ce-rhel7.3-20170523/docker* /usr/bin/

這里直接cp/usr/bin就好,因為/usr/local/bin不在PATH環境變量里。效果如下所示。

[linux1@virtual-machine ~]$ sudo su
[root@virtual-machine linux1]# cd ~
[root@virtual-machine ~]# wget ftp://ftp.unicamp.br/pub/linuxpatch/s390x/redhat/rhel7.3/docker-17.05.0-ce-rhel7.3-20170523.tar.gz
--2019-05-18 07:12:50--  ftp://ftp.unicamp.br/pub/linuxpatch/s390x/redhat/rhel7.3/docker-17.05.0-ce-rhel7.3-20170523.tar.gz
           => ‘docker-17.05.0-ce-rhel7.3-20170523.tar.gz’
Resolving ftp.unicamp.br (ftp.unicamp.br)... 143.106.10.149
Connecting to ftp.unicamp.br (ftp.unicamp.br)|143.106.10.149|:21... connected.
Logging in as anonymous ... Logged in!
==> SYST ... done.    ==> PWD ... done.
==> TYPE I ... done.  ==> CWD (1) /pub/linuxpatch/s390x/redhat/rhel7.3 ... done.
==> SIZE docker-17.05.0-ce-rhel7.3-20170523.tar.gz ... 27694090
==> PASV ... done.    ==> RETR docker-17.05.0-ce-rhel7.3-20170523.tar.gz ... done.
Length: 27694090 (26M) (unauthoritative)

100%[==========================================================================>] 27,694,090  8.20MB/s   in 3.2s   

2019-05-18 07:12:55 (8.20 MB/s) - ‘docker-17.05.0-ce-rhel7.3-20170523.tar.gz’ saved [27694090]

[root@virtual-machine ~]# tar -xzvf docker-17.05.0-ce-rhel7.3-20170523.tar.gz
docker-17.05.0-ce-rhel7.3-20170523/
docker-17.05.0-ce-rhel7.3-20170523/docker
docker-17.05.0-ce-rhel7.3-20170523/docker-containerd
docker-17.05.0-ce-rhel7.3-20170523/docker-containerd-ctr
docker-17.05.0-ce-rhel7.3-20170523/docker-containerd-shim
docker-17.05.0-ce-rhel7.3-20170523/docker-init
docker-17.05.0-ce-rhel7.3-20170523/docker-proxy
docker-17.05.0-ce-rhel7.3-20170523/docker-runc
docker-17.05.0-ce-rhel7.3-20170523/dockerd
docker-17.05.0-ce-rhel7.3-20170523/INSTALL
docker-17.05.0-ce-rhel7.3-20170523/URLs
docker-17.05.0-ce-rhel7.3-20170523/gcc-libffi-LICENSE
docker-17.05.0-ce-rhel7.3-20170523/gcc-libgo-LICENSE
docker-17.05.0-ce-rhel7.3-20170523/gcc-libgo-PATENTS
docker-17.05.0-ce-rhel7.3-20170523/libgo-PATENTS
docker-17.05.0-ce-rhel7.3-20170523/LICENSE
docker-17.05.0-ce-rhel7.3-20170523/NOTICE
[root@virtual-machine ~]# cp docker-17.05.0-ce-rhel7.3-20170523/docker* /usr/bin/
View Code

之后啟動docker daemon:

1 docker daemon -g /local/docker/lib &
[root@virtual-machine ~]# docker daemon -g /local/docker/lib &
[1] 21401
[root@virtual-machine ~]# Command "daemon" is deprecated, and will be removed in Docker 17.12. Please run `dockerd` directly.
WARN[0000] the "-g / --graph" flag is deprecated. Please use "--data-root" instead 
WARN[0000] could not change group /var/run/docker.sock to docker: group docker not found 
INFO[0000] libcontainerd: new containerd process, pid: 21410 
WARN[0000] containerd: low RLIMIT_NOFILE changing to max  current=1024 max=4096
INFO[0001] Graph migration to content-addressability took 0.00 seconds 
INFO[0001] Loading containers: start.                   
INFO[0001] Default bridge (docker0) is assigned with an IP address 172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address 
INFO[0001] Loading containers: done.                    
INFO[0001] Daemon has completed initialization          
INFO[0001] Docker daemon                                 commit=89658be graphdriver=overlay version=17.05.0-ce
INFO[0001] API listen on /var/run/docker.sock           
View Code

啟動完成后檢查一下后台有無docker進程在運行:

1 ps aux | grep docker
[root@virtual-machine ~]# ps aux | grep docker
root     21401  0.2  0.6 332008 24708 pts/0    Sl   07:18   0:00 dockerd -g /local/docker/lib
root     21410  0.0  0.1 203992  5536 ?        Ssl  07:18   0:00 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --shim docker-containerd-shim --runtime docker-runc
root     21532  0.0  0.0 106276   904 pts/0    S+   07:19   0:00 grep --color=auto docker
View Code

接下來我們要安裝docker-compose:

1 yum info python-setuptools
2 # 要先禁用ipv6服務,不然接下來安裝pip會非常慢
3 sysctl -w net.ipv6.conf.all.disable_ipv6=1
4 sysctl -w net.ipv6.conf.default.disable_ipv6=1
5 easy_install pip
6 pip install backports.ssl_match_hostname --upgrade --ignore-installed
[root@virtual-machine ~]# yum info python-setuptools
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Installed Packages
Name        : python-setuptools
Arch        : noarch
Version     : 0.9.8
Release     : 7.el7
Size        : 1.9 M
Repo        : installed
From repo   : rhel7-base
Summary     : Easily build and distribute Python packages
URL         : http://pypi.python.org/pypi/setuptools
License     : Python or ZPLv2.0
Description : Setuptools is a collection of enhancements to the Python distutils that allow
            : you to more easily build and distribute Python packages, especially ones that
            : have dependencies on other packages.
            : 
            : This package contains the runtime components of setuptools, necessary to
            : execute the software that requires pkg_resources.py.
            : 
            : This package contains the distribute fork of setuptools.

[root@virtual-machine ~]# sysctl -w net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6 = 1
[root@virtual-machine ~]# sysctl -w net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6 = 1
[root@virtual-machine ~]# easy_install pip
Searching for pip
Reading https://pypi.python.org/simple/pip/
Best match: pip 19.1.1
Downloading https://files.pythonhosted.org/packages/93/ab/f86b61bef7ab14909bd7ec3cd2178feb0a1c86d451bc9bccd5a1aedcde5f/pip-19.1.1.tar.gz#sha256=44d3d7d3d30a1eb65c7e5ff1173cdf8f7467850605ac7cc3707b6064bddd0958
Processing pip-19.1.1.tar.gz
Writing /tmp/easy_install-VwlKKm/pip-19.1.1/setup.cfg
Running pip-19.1.1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-VwlKKm/pip-19.1.1/egg-dist-tmp-7Zx6_R
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
  warnings.warn(msg)
warning: no files found matching 'docs/docutils.conf'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.mailmap'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.travis.yml'
warning: no previously-included files found matching 'tox.ini'
warning: no files found matching 'Makefile' under directory 'docs'
warning: no files found matching '*.bat' under directory 'docs'
warning: no previously-included files found matching 'src/pip/_vendor/six'
warning: no previously-included files found matching 'src/pip/_vendor/six/moves'
warning: no previously-included files matching '*.pyi' found under directory 'src/pip/_vendor'
no previously-included directories found matching '.github'
no previously-included directories found matching '.azure-pipelines'
no previously-included directories found matching 'docs/build'
no previously-included directories found matching 'news'
no previously-included directories found matching 'tasks'
no previously-included directories found matching 'tests'
no previously-included directories found matching 'tools'
Adding pip 19.1.1 to easy-install.pth file
Installing pip script to /usr/bin
Installing pip2.7 script to /usr/bin
Installing pip2 script to /usr/bin

Installed /usr/lib/python2.7/site-packages/pip-19.1.1-py2.7.egg
Processing dependencies for pip
Finished processing dependencies for pip
[root@virtual-machine ~]# pip install backports.ssl_match_hostname --upgrade --ignore-installed
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.                    
Collecting backports.ssl_match_hostname
  Downloading https://files.pythonhosted.org/packages/ff/2b/8265224812912bc5b7a607c44bf7b027554e1b9775e9ee0de8032e3de4b2/backports.ssl_match_hostname-3.7.0.1.tar.gz
Installing collected packages: backports.ssl-match-hostname
  Running setup.py install for backports.ssl-match-hostname ... done
Successfully installed backports.ssl-match-hostname-3.7.0.1
View Code

最后,使用pip安裝docker-compose:

1 yum install python-devel libffi-devel
2 pip install docker-compose==1.13.0
[root@virtual-machine ~]# yum install python-devel libffi-devel
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package libffi-devel.s390x 0:3.0.13-18.el7 will be installed
---> Package python-devel.s390x 0:2.7.5-77.el7_6 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================
 Package                      Arch                  Version                        Repository                  Size
====================================================================================================================
Installing:
 libffi-devel                 s390x                 3.0.13-18.el7                  rhel7-base                  23 k
 python-devel                 s390x                 2.7.5-77.el7_6                 rhel7-base                 398 k

Transaction Summary
====================================================================================================================
Install  2 Packages

Total download size: 421 k
Installed size: 1.1 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): libffi-devel-3.0.13-18.el7.s390x.rpm                                                  |  23 kB  00:00:00     
(2/2): python-devel-2.7.5-77.el7_6.s390x.rpm                                                 | 398 kB  00:00:00     
--------------------------------------------------------------------------------------------------------------------
Total                                                                               5.7 MB/s | 421 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python-devel-2.7.5-77.el7_6.s390x                                                                1/2 
  Installing : libffi-devel-3.0.13-18.el7.s390x                                                                 2/2 
  Verifying  : libffi-devel-3.0.13-18.el7.s390x                                                                 1/2 
  Verifying  : python-devel-2.7.5-77.el7_6.s390x                                                                2/2 

Installed:
  libffi-devel.s390x 0:3.0.13-18.el7                       python-devel.s390x 0:2.7.5-77.el7_6                      

Complete!
[root@virtual-machine ~]# pip install docker-compose==1.13.0
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.                    
Collecting docker-compose==1.13.0
  Downloading https://files.pythonhosted.org/packages/37/2b/f564105d548d8d92925aac550468b14282504e144d83b0c17139ce350fa3/docker_compose-1.13.0-py2.py3-none-any.whl (94kB)
     |████████████████████████████████| 102kB 12.3MB/s 
Requirement already satisfied: PyYAML<4,>=3.10 in /usr/lib/python2.7/site-packages/PyYAML-3.11-py2.7-linux-s390x.egg (from docker-compose==1.13.0) (3.11)
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/29/19/44753eab1fdb50770ac69605527e8859468f3c0fd7dc5a76dd9c4dbd7906/websocket_client-0.56.0-py2.py3-none-any.whl (200kB)
     |████████████████████████████████| 204kB 29.7MB/s 
Requirement already satisfied: backports.ssl-match-hostname>=3.5; python_version < "3.5" in /usr/lib/python2.7/site-packages (from docker-compose==1.13.0) (3.7.0.1)
Collecting dockerpty<0.5,>=0.4.1 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/8d/ee/e9ecce4c32204a6738e0a5d5883d3413794d7498fe8b06f44becc028d3ba/dockerpty-0.4.1.tar.gz
Collecting cached-property<2,>=1.2.0 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/3b/86/85c1be2e8db9e13ef9a350aecd6dea292bd612fa288c2f40d035bb750ded/cached_property-1.5.1-py2.py3-none-any.whl
Collecting docker<3.0,>=2.2.1 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/6b/01/74d61c7de9fb99cebbbfab62ee5c88a9b23e8b1c25a57eded5fc22e87bd2/docker-2.7.0-py2.py3-none-any.whl (119kB)
     |████████████████████████████████| 122kB 90.7MB/s 
Requirement already satisfied: requests!=2.11.0,<2.12,>=2.6.1 in /usr/lib/python2.7/site-packages/requests-2.11.1-py2.7.egg (from docker-compose==1.13.0) (2.11.1)
Requirement already satisfied: ipaddress>=1.0.16; python_version < "3.3" in /usr/lib/python2.7/site-packages (from docker-compose==1.13.0) (1.0.16)
Collecting colorama<0.4,>=0.3.7 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/db/c8/7dcf9dbcb22429512708fe3a547f8b6101c0d02137acbd892505aee57adf/colorama-0.3.9-py2.py3-none-any.whl
Collecting enum34<2,>=1.0.4; python_version < "3.4" (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/c5/db/e56e6b4bbac7c4a06de1c50de6fe1ef3810018ae11732a50f15f62c7d050/enum34-1.1.6-py2-none-any.whl
Requirement already satisfied: six<2,>=1.3.0 in /usr/lib/python2.7/site-packages (from docker-compose==1.13.0) (1.9.0)
Collecting texttable<0.9,>=0.8.1 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/74/49/23d944a6f7d4dd20846b2df2914fe108c96a253567c140c416edbf270f80/texttable-0.8.8.tar.gz
Collecting jsonschema<3,>=2.5.1 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/77/de/47e35a97b2b05c2fadbec67d44cfcdcd09b8086951b331d82de90d2912da/jsonschema-2.6.0-py2.py3-none-any.whl
Collecting docopt<0.7,>=0.6.1 (from docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz
Collecting docker-pycreds>=0.2.1 (from docker<3.0,>=2.2.1->docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/f5/e8/f6bd1eee09314e7e6dee49cbe2c5e22314ccdb38db16c9fc72d2fa80d054/docker_pycreds-0.4.0-py2.py3-none-any.whl
Collecting functools32; python_version == "2.7" (from jsonschema<3,>=2.5.1->docker-compose==1.13.0)
  Downloading https://files.pythonhosted.org/packages/c5/60/6ac26ad05857c601308d8fb9e87fa36d0ebf889423f47c3502ef034365db/functools32-3.2.3-2.tar.gz
ERROR: docker 2.7.0 has requirement requests!=2.18.0,>=2.14.2, but you'll have requests 2.11.1 which is incompatible.
Installing collected packages: websocket-client, dockerpty, cached-property, docker-pycreds, docker, colorama, enum34, texttable, functools32, jsonschema, docopt, docker-compose
  Running setup.py install for dockerpty ... done
  Running setup.py install for texttable ... done
  Running setup.py install for functools32 ... done
  Running setup.py install for docopt ... done
Successfully installed cached-property-1.5.1 colorama-0.3.9 docker-2.7.0 docker-compose-1.13.0 docker-pycreds-0.4.0 dockerpty-0.4.1 docopt-0.6.2 enum34-1.1.6 functools32-3.2.3.post2 jsonschema-2.6.0 texttable-0.8.8 websocket-client-0.56.0
View Code

別忘記驗證一下docker-compose是否已經安裝:

1 docker-compose version 
[root@virtual-machine ~]# docker-compose version
docker-compose version 1.13.0, build 1719ceb
docker-py version: 2.7.0
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017
View Code

接下來我們要手動拉取websphere-liberty鏡像到本地,后台運行docker並指定端口映射規則:

1 docker image pull s390x/websphere-liberty:webProfile7
2 docker images
3 docker run -d -p 80:9080 -p 443:9443 s390x/websphere-liberty:webProfile7
4 docker ps
[root@virtual-machine ~]# docker image pull s390x/websphere-liberty:webProfile7
webProfile7: Pulling from s390x/websphere-liberty
a39cfce7a60d: Pull complete 
4e699efbddb6: Pull complete 
9a3ffeac4412: Pull complete 
52c5a080fd6d: Pull complete 
6f0d27faa63a: Pull complete 
a3d346a6c218: Pull complete 
e9129f75e0bc: Pull complete 
905ebfd4a924: Pull complete 
bd9b8600bfe7: Pull complete 
5746a3a16c6e: Pull complete 
621479e04496: Pull complete 
26db9a45b5d9: Pull complete 
32c81cd7fa4a: Pull complete 
705855d9301f: Pull complete 
0bd5ae8e4470: Pull complete 
Digest: sha256:87e41c209fa1c8ab33fc0cd0e126eec1493a50c49fe557f398707b4f4755d07a
Status: Downloaded newer image for s390x/websphere-liberty:webProfile7
[root@virtual-machine ~]# docker images
REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
s390x/websphere-liberty   webProfile7         def868b21def        2 days ago          473MB
[root@virtual-machine ~]# docker run -d -p 80:9080 -p 443:9443 s390x/websphere-liberty:webProfile7
8a2910700aab9c7b459e10c65778b20318822a957112d20f9bb9f4d948bde546
[root@virtual-machine ~]# docker ps
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                         NAMES
8a2910700aab        s390x/websphere-liberty:webProfile7   "/opt/ibm/helpers/..."   5 seconds ago       Up 4 seconds        0.0.0.0:80->9080/tcp, 0.0.0.0:443->9443/tcp   goofy_hoover
View Code

打開瀏覽器,直接訪問服務器的公網ip就可以看到如圖效果:

接下來我們要安裝並運行WorkPress:

1 alias vim='vi'
2 source ~/.bashrc
3 vim docker-compose.yml

把以下內容復制到新的文件中去:

 1 version: '2'
 2 services:
 3   wordpress:
 4     image: s390x/wordpress
 5     ports:
 6       - 8080:80 # 將本地 8080 端口映射到容器的 80 端口
 7     environment:
 8       WORDPRESS_DB_PASSWORD: example
 9   mysql:
10     image: brunswickheads/mariadb-5.5-s390x
11     environment:
12       MYSQL_ROOT_PASSWORD: example

創建新的wordpress目錄方便整理:

1 mkdir wordpress
2 mv docker-compose.yml wordpress/
3 cd wordpress/
4 ls
[root@virtual-machine ~]# alias vim='vi'
[root@virtual-machine ~]# source ~/.bashrc
[root@virtual-machine ~]# vim docker-compose.yml
[root@virtual-machine ~]# cat docker-compose.yml 
version: '2'
services:
  wordpress:
    image: s390x/wordpress
    ports:
      - 8080:80 # 將本地 8080 端口映射到容器的 80 端口
    environment:
      WORDPRESS_DB_PASSWORD: example
  mysql:
    image: brunswickheads/mariadb-5.5-s390x
    environment:
      MYSQL_ROOT_PASSWORD: example
[root@virtual-machine ~]# mkdir wordpress
[root@virtual-machine ~]# mv docker-compose.yml wordpress/
[root@virtual-machine ~]# cd wordpress/
[root@virtual-machine wordpress]# ls
docker-compose.yml
View Code

最后,根據docker-compose.yml中定義的服務啟動容器:

1 docker-compose up -d
[root@virtual-machine wordpress]# docker-compose up -d
Creating network "wordpress_default" with the default driver
Pulling wordpress (s390x/wordpress:latest)...
latest: Pulling from s390x/wordpress
a0a92d62c165: Pull complete
23fb66856860: Pull complete
b38a4e89ae8f: Pull complete
2fa08f5a322d: Pull complete
bbf2af7622ca: Pull complete
3dacb3b3a74e: Pull complete
7b49a00cab66: Pull complete
0226e5908d56: Pull complete
af4747f0be82: Pull complete
caa0c91ea082: Pull complete
ecabe806d92c: Pull complete
5d55f6a2617f: Pull complete
d0e6cfaadf87: Pull complete
0f9356af4b28: Pull complete
e61aa2870c8c: Pull complete
0c6cf289ae6c: Pull complete
22cc2d6c6f63: Pull complete
e43117da3e19: Pull complete
Digest: sha256:435a9522b41c7e2f5c8dd984a5fde0422ecd87cef67811c269601618e21c5b03
Status: Downloaded newer image for s390x/wordpress:latest
Pulling mysql (brunswickheads/mariadb-5.5-s390x:latest)...
latest: Pulling from brunswickheads/mariadb-5.5-s390x
67ebcd5ec325: Pull complete
a3ed95caeb02: Pull complete
817149461e92: Pull complete
124b1e67e903: Pull complete
Digest: sha256:7e67bc8c7d4323dcb3398539f0f819beba4dcae93ded0f72ea6dcf35f39ad10f
Status: Downloaded newer image for brunswickheads/mariadb-5.5-s390x:latest
Creating wordpress_mysql_1 ... 
Creating wordpress_wordpress_1 ... 
Creating wordpress_mysql_1
Creating wordpress_wordpress_1 ... done
View Code

查看相關容器的狀態:

1 docker-compose ps
[root@virtual-machine wordpress]# docker-compose ps
        Name                       Command               State          Ports         
-------------------------------------------------------------------------------------
wordpress_mysql_1       /docker-entrypoint.sh mysq ...   Up      3306/tcp             
wordpress_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp
View Code

登錄服務器公網ip:8080,可看到如下界面:

接下來我們要准備MEAN Stack環境。

1 cd ~
2 git clone https://github.com/IBM/Cloud-Native-Workloads-on-LinuxONE
3 cp -r Cloud-Native-Workloads-on-LinuxONE/files/mean-docker ./
4 yum install -y tree
5 tree mean-docker
[root@virtual-machine wordpress]# cd ~
[root@virtual-machine ~]# git clone https://github.com/IBM/Cloud-Native-Workloads-on-LinuxONE
Cloning into 'Cloud-Native-Workloads-on-LinuxONE'...
remote: Enumerating objects: 866, done.
remote: Total 866 (delta 0), reused 0 (delta 0), pack-reused 866
Receiving objects: 100% (866/866), 2.80 MiB | 0 bytes/s, done.
Resolving deltas: 100% (102/102), done.
[root@virtual-machine ~]# cp -r Cloud-Native-Workloads-on-LinuxONE/files/mean-docker ./
[root@virtual-machine ~]# yum install -y tree
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Resolving Dependencies
--> Running transaction check
---> Package tree.s390x 0:1.6.0-10.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

====================================================================================================================
 Package                Arch                    Version                          Repository                    Size
====================================================================================================================
Installing:
 tree                   s390x                   1.6.0-10.el7                     rhel7-base                    45 k

Transaction Summary
====================================================================================================================
Install  1 Package

Total download size: 45 k
Installed size: 87 k
Downloading packages:
tree-1.6.0-10.el7.s390x.rpm                                                                  |  45 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : tree-1.6.0-10.el7.s390x                                                                          1/1 
  Verifying  : tree-1.6.0-10.el7.s390x                                                                          1/1 

Installed:
  tree.s390x 0:1.6.0-10.el7                                                                                         

Complete!
[root@virtual-machine ~]# tree mean-docker
mean-docker
├── docker-compose.yml
├── express-server
│   ├── app
│   │   ├── models
│   │   │   └── todo.js
│   │   └── routes.js
│   ├── config
│   │   └── database.js
│   ├── Dockerfile
│   ├── license
│   ├── package.json
│   ├── public
│   │   ├── index.html
│   │   └── js
│   │       ├── controllers
│   │       │   └── main.js
│   │       ├── core.js
│   │       └── services
│   │           └── todos.js
│   ├── README.md
│   └── server.js
└── README.md

8 directories, 14 files
View Code

因為我們之前占用了8080端口,所以需要修改一下配置文件使服務正常啟動。

1 cd mean-docker/
2 vim docker-compose.yml
3 # 把兩個8080都改成8081並保存退出
4 vim express-server/Dockerfile
5 # 把8080改成8081,並在文件末尾新建一行添加"ENV PORT 8081"
[root@virtual-machine ~]# cd mean-docker/
[root@virtual-machine mean-docker]# vim docker-compose.yml 
[root@virtual-machine mean-docker]# vim express-server/Dockerfile 
[root@virtual-machine mean-docker]# ^C
[root@virtual-machine mean-docker]# cat docker-compose.yml 
version: '2' # specify docker-compose version

# Define the services/containers to be run
services:
  express: #name of the first service
    build: express-server # specify the directory of the Dockerfile
    ports:
      - "8081:8081" #specify ports forwarding
    links:
      - database

  database: # name of the second service
    image: sinenomine/mongodb-s390x # specify image to build container from
    ports:
      - "27017:27017" # specify port forwarding
[root@virtual-machine mean-docker]# cat express-server/Dockerfile 
# Create image based off of the official Node 6 image
FROM s390x/ibmnode:latest

# Create a directory where our app will be placed
RUN mkdir -p /usr/src

# Change directory so that our commands run inside this new dir
WORKDIR /usr/src

# Copy dependency definitions
COPY package.json /usr/src

# Install dependecies
RUN npm install

# Get all the code needed to run the app
COPY . /usr/src

# Expose the port the app runs in
EXPOSE 8081

# Serve the app
CMD ["npm", "start"]

# Express listening port
ENV PORT 8081
View Code

mean-docker目錄下運行docker-compose up:

1 docker-compose up -d
[root@virtual-machine mean-docker]# docker-compose up
Creating network "meandocker_default" with the default driver
Pulling database (sinenomine/mongodb-s390x:latest)...
latest: Pulling from sinenomine/mongodb-s390x
7c5b25b1702b: Pull complete
f7e2beee24dc: Pull complete
f77a8563476a: Pull complete
Digest: sha256:e2c2f0a83664b31d4148b35e6c31895fd8397efec55830823379efa227682bc2
Status: Downloaded newer image for sinenomine/mongodb-s390x:latest
Building express
Step 1/9 : FROM s390x/ibmnode:latest
latest: Pulling from s390x/ibmnode
b1ebf925223c: Pull complete
cd8a07f0c922: Pull complete
2d1c359f5ed9: Pull complete
c35fcc66064c: Pull complete
d624275f8e7d: Pull complete
818d5fa6bb92: Pull complete
64c9cabe7e6e: Pull complete
c052205f20b1: Pull complete
7df1929f5b12: Pull complete
639d72997f7b: Pull complete
Digest: sha256:32e54c7e09999a0113966754324a56009506403fb73635edacc753af0df09213
Status: Downloaded newer image for s390x/ibmnode:latest
 ---> 9a87e4f94692
Step 2/9 : RUN mkdir -p /usr/src
 ---> Running in e30a90bc8bb9
INFO[2622] Layer sha256:11fecd029e26edf344a0dec27d27e73f5f5ab6447296850e7def60577dcf7d12 cleaned up 
 ---> d68450f5b19a
Removing intermediate container e30a90bc8bb9
Step 3/9 : WORKDIR /usr/src
INFO[2624] Layer sha256:11fecd029e26edf344a0dec27d27e73f5f5ab6447296850e7def60577dcf7d12 cleaned up 
 ---> 834db0a5158c
Removing intermediate container 0acfc10c188c
Step 4/9 : COPY package.json /usr/src
 ---> 6250d20c51df
Removing intermediate container aba7994dfa15
Step 5/9 : RUN npm install
 ---> Running in 987b22a5c3a5
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN node-todo@0.0.1 No repository field.

added 82 packages in 2.46s
 ---> 5ce9e9ccc178
Removing intermediate container 987b22a5c3a5
Step 6/9 : COPY . /usr/src
 ---> 2deda2d689e5
Removing intermediate container 3711106be602
Step 7/9 : EXPOSE 8081
 ---> Running in 856746e042e0
INFO[2640] Layer sha256:d382aae1568c2bb9c4a9fb25b7d809059d4742b00bfd7df97b34bc2a42938a70 cleaned up 
 ---> 0b78f2cfb933
Removing intermediate container 856746e042e0
Step 8/9 : CMD npm start
 ---> Running in 9e32fa5348f2
INFO[2646] Layer sha256:d382aae1568c2bb9c4a9fb25b7d809059d4742b00bfd7df97b34bc2a42938a70 cleaned up 
 ---> ff4f8b8205a2
Removing intermediate container 9e32fa5348f2
Step 9/9 : ENV PORT 8081
 ---> Running in e369dd139028
INFO[2650] Layer sha256:d382aae1568c2bb9c4a9fb25b7d809059d4742b00bfd7df97b34bc2a42938a70 cleaned up 
 ---> 470ea5a42df7
Removing intermediate container e369dd139028
Successfully built 470ea5a42df7
Successfully tagged meandocker_express:latest
WARNING: Image for service express was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
Creating meandocker_database_1 ... 
Creating meandocker_database_1 ... done
Creating meandocker_express_1 ... 
Creating meandocker_express_1 ... done
Attaching to meandocker_database_1, meandocker_express_1
database_1  | note: noprealloc may hurt performance in many applications
express_1   | 
express_1   | > node-todo@0.0.1 start /usr/src
express_1   | > node server.js
express_1   | 
express_1   | App listening on port 8081
express_1   | (node:17) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/4.x/docs/connections.html#use-mongo-client
View Code

然后還要修改index.html里的angular的引用地址。因為某些大家都懂的原因,會導致訪問速度非常慢。

1 vim mean-docker/express-server/public/index.html
2 #找到<script src="****angular.min.js">那一行,把引號內容修改為下面的地址即可
3 http://cdn.staticfile.org/angular.js/1.2.16/angular.min.js

此時訪問服務器公網ip:8081即可使用一個Todo App。實驗一也就到此結束了。

實驗二也是把一個app部署到雲服務器上。這次我們需要登錄自己的github賬戶,並fork https://github.com/IBM/ICp-banking-microservices,然后clone到本機中(不是服務器)。用vscode打開repo里的banking-application文件夾(然后不用理它)。

瀏覽器訪問 https://developer-contest-spbodieusibmcom-prod.developer.us.apiconnect.ibmcloud.com 並注冊一個賬戶(郵箱必須與注冊IBM ID的郵箱相同)

注冊完畢后登錄,在Apps選項卡下點擊Create new App創建新應用,Title輸入My Banking Application即可,之后點擊Submit提交。這時需要記錄下Client IDClient Secret,之后會用到。

然后需要申請banking API。在API Products選項卡下找到Banking Product,點擊Subscribe申請Default Plan,選擇剛才創建的應用My Banking Application。

最后回到vscode,打開banking-application/public/js/bankingAPI.js並修改里面的Client IDClient Secret。在vscode里啟動終端:

1 npm install
2 node app.js

此時瀏覽器訪問http://localhost:3000,即可使用應用。隨便選擇一個customer ID測試,若有JSON格式的數據返回,則說明 API 可用。(實際上經常出現超時的情況)

更新代碼並推送到遠程倉庫:

1 git add public/js/bankingAPI.js
2 git commit -m "Update of bankingAPI.js"
3 git push origin master

回到服務器終端,把剛剛更新完的repo clone下來:

1 cd ~
2 git clone https://github.com/JHSeng/ICp-banking-microservices.git

之后使用docker build命令構建鏡像:

1 cd ICp-banking-microservices/
2 cd banking-application/
3 ls
4 #可以把jhseng改成你的用戶名
5 docker build -t "jhseng-banking-image:latest" ./
[root@virtual-machine ~]# cd ICp-banking-microservices/
[root@virtual-machine ICp-banking-microservices]# cd banking-application/
[root@virtual-machine banking-application]# ls
app.js  Dockerfile  package.json  public
[root@virtual-machine banking-application]# docker build -t "jhseng-banking-image:latest" ./       
Sending build context to Docker daemon  316.9kB
Step 1/9 : FROM ibmcom/ibmnode
latest: Pulling from ibmcom/ibmnode
b1ebf925223c: Already exists 
cd8a07f0c922: Already exists 
2d1c359f5ed9: Already exists 
c35fcc66064c: Already exists 
d624275f8e7d: Already exists 
818d5fa6bb92: Already exists 
64c9cabe7e6e: Already exists 
c052205f20b1: Already exists 
7df1929f5b12: Already exists 
639d72997f7b: Already exists 
Digest: sha256:44c68d2ee535472c3be166263bd5c3f0f208da64d59deb19fcd8c409ad0d9908
Status: Downloaded newer image for ibmcom/ibmnode:latest
 ---> 9a87e4f94692
Step 2/9 : WORKDIR "/app"
 ---> b11ff994a9ba
Removing intermediate container 24b113bc87db
Step 3/9 : COPY package.json /app/
 ---> 6a5bab8455bd
Removing intermediate container e857801a6aaf
Step 4/9 : RUN cd /app; npm install; npm prune --production
 ---> Running in 21acc1391fa2
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN banking-application@1.0.0 No repository field.

added 58 packages in 1.672s
npm WARN banking-application@1.0.0 No repository field.

up to date in 0.217s
 ---> 3479d760c479
Removing intermediate container 21acc1391fa2
Step 5/9 : COPY . /app
 ---> 1f716ac1e072
Removing intermediate container f3fce68e43a6
Step 6/9 : ENV NODE_ENV production
 ---> Running in 6d99b81bf11c
INFO[4152] Layer sha256:7c0bd4434c13bc4e8510693eaf43b29d2e2dec4a8b4e61cb72a428781511c4ae cleaned up 
 ---> b2a5fa1cd291
Removing intermediate container 6d99b81bf11c
Step 7/9 : ENV PORT 3000
 ---> Running in b6d671bdfff3
INFO[4155] Layer sha256:7c0bd4434c13bc4e8510693eaf43b29d2e2dec4a8b4e61cb72a428781511c4ae cleaned up 
 ---> f50429c9c3aa
Removing intermediate container b6d671bdfff3
Step 8/9 : EXPOSE 3000
 ---> Running in 970f3c104aea
INFO[4159] Layer sha256:7c0bd4434c13bc4e8510693eaf43b29d2e2dec4a8b4e61cb72a428781511c4ae cleaned up 
 ---> f910bdb952f5
Removing intermediate container 970f3c104aea
Step 9/9 : CMD npm start
 ---> Running in 2480f35ef6c8
INFO[4163] Layer sha256:7c0bd4434c13bc4e8510693eaf43b29d2e2dec4a8b4e61cb72a428781511c4ae cleaned up 
 ---> 47523b9ade76
Removing intermediate container 2480f35ef6c8
Successfully built 47523b9ade76
Successfully tagged jhseng-banking-image:latest
View Code

運行容器:

1 docker run -p 3000:3000 jhseng-banking-image

訪問服務器公網ip:3000即可訪問應用。

day1的實驗到此結束。

Day 2:

day2的實驗需要用到container(就是之前注冊linuxONE賬戶之后看不到的那個選項卡)。注冊地址:https://linuxone.cloud.marist.edu/cloud/#/register?flag=container。務必使用注冊linuxONE用的郵箱,填完之后郵箱下面會出現提示,直接點click here再去驗證郵件即可。

點擊container並登陸,就可以看到歡迎界面。

點擊右上角的目錄(加載速度巨慢,IBM的工程師說就是土豆服務器,連100人的並發都支持不了),然后就可以看到若干軟件包。選擇openmplbank並點擊config,填個發行版名稱,選擇一下目標名稱空間就ok了,剩下都不用改。點擊安裝,會彈出安裝已經開始並查看helm發行版的提示,點擊就可以看到我們已經部署好的應用了。

 點擊右上角的啟動,就可以看到之前我們手動部署app成功之后的頁面。

之后老師有一個大作業demo展示,這里給出b站視頻:https://www.bilibili.com/video/av52951028/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM