第五章命令和代码测试记录 测试环境:AWS Tokyo虚拟机 2C8G ; 下面是所有命令和部分命令结果的记录,读书笔记PPT还需要把代码在读读才能出来
ubuntu@ip-172-31-30-243:~$ df -kh Filesystem Size Used Avail Use% Mounted on udev 3.9G 8.0K 3.9G 1% /dev tmpfs 799M 324K 799M 1% /run /dev/xvda1 99G 802M 94G 1% / none 4.0K 0 4.0K 0% /sys/fs/cgroup none 5.0M 0 5.0M 0% /run/lock none 3.9G 0 3.9G 0% /run/shm none 100M 0 100M 0% /run/user //虚拟机的磁盘不能是默认的8GB,至少需要20GB ubuntu@ip-172-31-30-243:~$ sudo apt-get update 、、、、、、 Fetched 11.4 MB in 3s (3,223 kB/s) Reading package lists… Done // 安装git ubuntu@ip-172-31-30-243:~$ sudo apt-get install git -y 、、、、、、 Setting up git (1:1.9.1-1ubuntu0.3) … // 下载微服务生命周期环境部署代码 ubuntu@ip-172-31-30-243:~$ git clone https://github.com/vfarcic/ms-lifecycle.git Cloning into ‘ms-lifecycle’… remote: Counting objects: 2964, done. remote: Total 2964 (delta 0), reused 0 (delta 0), pack-reused 2964 Receiving objects: 100% (2964/2964), 44.22 MiB | 1.43 MiB/s, done. Resolving deltas: 100% (1598/1598), done. Checking connectivity… done. ubuntu@ip-172-31-30-243:~$ ls ms-lifecycle // 在虚拟机里需要有vagrant目录,有些脚本和他们相关,ms-lifecycle目录的内容会copy进去 ubuntu@ip-172-31-30-243:~$ sudo mkdir /vagrant ubuntu@ip-172-31-30-243:~$ sudo cp -r ms-lifecycle/* /vagrant/ ubuntu@ip-172-31-30-243:~$ cd /vagrant // 环境的部署配置,要看cd 虚拟机的IP和启动配置脚本 cat Vagrantfile 、、、、、 config.vm.define “cd” do |d| d.vm.box = “ubuntu/trusty64” d.vm.hostname = “cd” d.vm.network “private_network”, ip: “10.100.198.200” d.vm.provision :shell, path: “scripts/bootstrap_ansible.sh” d.vm.provision :shell, inline: “PYTHONUNBUFFERED=1 ansible-playbook /vagrant/ansible/cd.yml -c local” d.vm.provider “virtualbox” do |v| v.memory = 2048 end end 、、、、、 // 执行操作系统基础配置脚本 ubuntu@ip-172-31-30-243:/vagrant$ sudo sh scripts/bootstrap_ansible.sh Installing Ansible… Reading package lists… Done Building dependency tree Reading state information… Done software-properties-common is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 90 not upgraded. Ansible is a radically simple IT automation platform that makes your applications and systems easier to deploy. Avoid writing scripts or custom code to de 、、、 Setting up ansible (2.1.0.0-1ppa~trusty) … Processing triggers for libc-bin (2.19-0ubuntu6.6) … // 执行cd服务器角色功能配置ansible脚本 ubuntu@ip-172-31-30-243:/vagrant$ sudo PYTHONUNBUFFERED=1 ansible-playbook /vagrant/ansible/cd.yml -c local [WARNING]: provided hosts list is empty, only localhost is available PLAY [localhost] *************************************************************** TASK [setup] ******************************************************************* ok: [localhost] 、、、、、、、、 TASK [registry : Registry container is running] ******************************** changed: [localhost] TASK [registry : Mirror container is running] ********************************** changed: [localhost] PLAY RECAP ********************************************************************* localhost : ok=22 changed=19 unreachable=0 failed=0 ubuntu@ip-172-31-30-243:/vagrant$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fe52c23977db registry:2 “/bin/registry serve ” About a minute ago Up About a minute 0.0.0.0:5001->5000/tcp registry-mirror a002375071f7 registry:2 “/bin/registry serve ” About a minute ago Up About a minute 0.0.0.0:5000->5000/tcp registry 2e11897bdc3b uifd/ui-for-docker “/dockerui” About a minute ago Up About a minute 0.0.0.0:9000->9000/tcp dockerui // 在浏览器里面用public 测试其中的docker ui容器是否工作正常,这是个有用的容器 http://52.197.175.5:9000/ // 在eth0的网卡上配置一个cd服务器的ip地址,由于本实验把dev服务器和cd服务器合二为一了,纯为了跑通这次测试命令 ubuntu@ip-172-31-30-243:/vagrant$ sudo ifconfig eth0:1 10.100.198.200/16 up ubuntu@ip-172-31-30-243:/vagrant$ ip add s 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: mtu 9001 qdisc pfifo_fast state UP group default qlen 1000 link/ether 06:2b:fe:3a:cc:a1 brd ff:ff:ff:ff:ff:ff inet 172.31.30.243/20 brd 172.31.31.255 scope global eth0 valid_lft forever preferred_lft forever inet 10.100.198.200/16 brd 10.100.255.255 scope global eth0:1 valid_lft forever preferred_lft forever inet6 fe80::42b:feff:fe3a:cca1/64 scope link valid_lft forever preferred_lft forever 3: docker0: mtu 1500 qdisc noqueue state UP group default link/ether 02:42:30:69:e4:bb brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:30ff:fe69:e4bb/64 scope link valid_lft forever preferred_lft forever 5: veth3388206: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 4a:f5:05:b5:54:2d brd ff:ff:ff:ff:ff:ff inet6 fe80::48f5:5ff:feb5:542d/64 scope link valid_lft forever preferred_lft forever 7: veth2fa3586: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 4e:57:8f:15:9b:d1 brd ff:ff:ff:ff:ff:ff inet6 fe80::4c57:8fff:fe15:9bd1/64 scope link valid_lft forever preferred_lft forever 9: veth6cee7e5: mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 82:6d:b3:25:0b:a1 brd ff:ff:ff:ff:ff:ff inet6 fe80::806d:b3ff:fe25:ba1/64 scope link valid_lft forever preferred_lft forever // 下载书店代码 ubuntu@ip-172-31-30-243:~$ git clone https://github.com/vfarcic/books-ms.git Cloning into ‘books-ms’… remote: Counting objects: 1294, done. remote: Total 1294 (delta 0), reused 0 (delta 0), pack-reused 1294 Receiving objects: 100% (1294/1294), 2.85 MiB | 1.07 MiB/s, done. Resolving deltas: 100% (620/620), done. Checking connectivity… done. // 在eth0的网卡上配置dev服务器的ip地址 ubuntu@ip-172-31-30-243:~/books-ms$ sudo ifconfig eth0:2 10.100.199.200/16 up ubuntu@ip-172-31-30-243:~/books-ms$ ifconfig docker0 Link encap:Ethernet HWaddr 02:42:30:69:e4:bb inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:30ff:fe69:e4bb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:721 errors:0 dropped:0 overruns:0 frame:0 TX packets:780 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1377826 (1.3 MB) TX bytes:67451 (67.4 KB) eth0 Link encap:Ethernet HWaddr 06:2b:fe:3a:cc:a1 inet addr:172.31.30.243 Bcast:172.31.31.255 Mask:255.255.240.0 inet6 addr: fe80::42b:feff:fe3a:cca1/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX packets:153858 errors:0 dropped:0 overruns:0 frame:0 TX packets:12903 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:224307983 (224.3 MB) TX bytes:2593324 (2.5 MB) eth0:1 Link encap:Ethernet HWaddr 06:2b:fe:3a:cc:a1 inet addr:10.100.198.200 Bcast:10.100.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 eth0:2 Link encap:Ethernet HWaddr 06:2b:fe:3a:cc:a1 inet addr:10.100.199.200 Bcast:10.100.255.255 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 // 开始构建书店项目的测试容器,这个容器里面包含了,所有很多测试脚本,这个步骤是花时间最长的步骤,aws的虚拟机在无墙的环境中,这个步骤中需要至少15分钟 10:21 sudo docker build -f Dockerfile.test -t 10.100.198.200:5000/books-ms-tests . 、、、、、 Removing intermediate container da4a78ade929 Step 32 : CMD /source/run_tests.sh —> Running in 1c134aee3f61 —> 60c2d6917fa1 Removing intermediate container 1c134aee3f61 Step 33 : EXPOSE 8080 —> Running in 2e88d9facc10 —> fc19ea46623b Removing intermediate container 2e88d9facc10 Successfully built fc19ea46623b 10:37 ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.100.198.200:5000/books-ms-tests latest fc19ea46623b About a minute ago 2.229 GB registry 2 8ff6a4aae657 6 weeks ago 171.5 MB debian jessie 1b088884749b 6 weeks ago 125.1 MB uifd/ui-for-docker latest c2b1b90a9e75 12 weeks ago 7.391 MB ubuntu@ip-172-31-30-243:~/books-ms$ // 测试书店当前的版本,查看测试结果 10:45 sudo docker-compose -f docker-compose-dev.yml run –rm tests ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker-compose -f docker-compose-dev.yml run –rm tests WARNING: The DOMAIN variable is not set. Defaulting to a blank string. mongod –help for help and startup options 、、、、、、 [info] Packaging /source/target/scala-2.10/books-ms-assembly-1.0.jar … [info] Done packaging. [success] Total time: 9 s, completed Jul 23, 2016 2:46:23 PM ubuntu@ip-172-31-30-243:~/books-ms$ ll target/scala-2.10/ total 38296 drwxr-xr-x 4 root root 4096 Jul 23 14:46 ./ drwxr-xr-x 3 root root 4096 Jul 23 14:45 ../ -rw-r–r– 1 root root 39198710 Jul 23 14:46 books-ms-assembly-1.0.jar drwxr-xr-x 3 root root 4096 Jul 23 14:45 classes/ drwxr-xr-x 3 root root 4096 Jul 23 14:46 test-classes/ ubuntu@ip-172-31-30-243:~/books-ms$ // 构建需要书店docker镜像 sudo docker build -t 10.100.198.200:5000/books-ms . ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE 10.100.198.200:5000/books-ms latest c6543443c183 About a minute ago 708.4 MB 10.100.198.200:5000/books-ms-tests latest fc19ea46623b 30 minutes ago 2.229 GB registry 2 8ff6a4aae657 6 weeks ago 171.5 MB java latest 264282a59a95 6 weeks ago 669.2 MB debian jessie 1b088884749b 6 weeks ago 125.1 MB uifd/ui-for-docker latest c2b1b90a9e75 12 weeks ago 7.391 MB ubuntu@ip-172-31-30-243:~/books-ms$ // 本地手工测试书店项目 sudo docker run -d –name books-db mongo sudo docker run -d –name books-ms -p 8080:8080 –link books-db:db 10.100.198.200:5000/books-ms sudo docker exec -it books-ms bash env | grep DB ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker exec -it books-ms bash root@fda8f1b7a17b:/# env | grep DB DB_HOST=localhost DB_NAME=/books-ms/db DB_ENV_GPG_KEYS=DFFA3DCF326E302C4787673A01C4E7FAAAB2461C 42F3E95A2C4F08279C4960ADD68FA50FEA312927 DB_PORT_27017_TCP=tcp://172.17.0.5:27017 DB_PORT=tcp://172.17.0.5:27017 DB_ENV_MONGO_VERSION=3.2.8 DB_ENV_GOSU_VERSION=1.7 DB_PORT_27017_TCP_PORT=27017 DB_ENV_MONGO_MAJOR=3.2 DB_PORT_27017_TCP_PROTO=tcp DB_PORT_27017_TCP_ADDR=172.17.0.5 DB_COLLECTION=books DB_DBNAME=books sudo docker ps -a ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fda8f1b7a17b 10.100.198.200:5000/books-ms “/run.sh” About a minute ago Up About a minute 0.0.0.0:8080->8080/tcp books-ms 7929fce178e3 mongo “/entrypoint.sh mongo” About a minute ago Up About a minute 27017/tcp books-db fe52c23977db registry:2 “/bin/registry serve ” About an hour ago Up About an hour 0.0.0.0:5001->5000/tcp registry-mirror a002375071f7 registry:2 “/bin/registry serve ” About an hour ago Up About an hour 0.0.0.0:5000->5000/tcp registry 2e11897bdc3b uifd/ui-for-docker “/dockerui” About an hour ago Up About an hour 0.0.0.0:9000->9000/tcp dockerui sudo docker logs books-ms 15:10:07.511 [routingSystem-akka.actor.default-dispatcher-5] DEBUG c.m.c.c.c.s.RegisterConversionHelpers$ – Registering Scala Conversions. 、、、、、、 [INFO] [07/23/2016 15:10:07.895] [routingSystem-akka.actor.default-dispatcher-5] [akka://routingSystem/user/IO-HTTP/listener-0] Bound to /0.0.0.0:8080 [INFO] [07/23/2016 15:10:07.898] [routingSystem-akka.actor.default-dispatcher-5] [akka://routingSystem/deadLetters] Message [akka.io.Tcp$Bound] from Actor[akka://routingSystem/user/IO-HTTP/listener-0#-734467235] to Actor[akka://routingSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings ‘akka.log-dead-letters’ and ‘akka.log-dead-letters-during-shutdown’. sudo docker rm -f books-ms books-db sudo docker ps -a // 用docker-compose 来启动书店项目 sudo docker-compose -f docker-compose-dev.yml up -d app ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker-compose -f docker-compose-dev.yml up -d app WARNING: The DOMAIN variable is not set. Defaulting to a blank string. Creating booksms_db_1 Creating booksms_app_1 sudo docker-compose logs ubuntu@ip-172-31-30-243:~/books-ms$ sudo docker-compose logs Attaching to booksms_app_1, booksms_db_1 app_1 | 15:12:54.718 [routingSystem-akka.actor.default-dispatcher-4] DE 、、、、、、 db_1 | 2016-07-23T15:12:54.953+0000 I NETWORK [initandlisten] connection accepted from 172.17.0.6:41673 #1 (1 connection now open) ubuntu@ip-172-31-30-243:~/books-ms$ // 在外网环境测试书店的前端,插入三本书之后它也不会显示,不知道是有bug还是后台服务还没有配好 http://52.197.175.5:8080/components/tc-books/demo/index.html // 测试后端服务器的api curl -H ‘Content-Type: application/json’ -X PUT -d \ ‘{“_id”: 1, “title”: “My First Book”, “author”: “John Doe”, “description”: “Not a very good book”}’ \ http://localhost:8080/api/v1/books | jq ‘.’ curl -H ‘Content-Type: application/json’ -X PUT -d \ ‘{“_id”: 2, “title”: “My Second Book”, “author”: “John Doe”, “description”: “Not a bad as the first book”}’ \ http://localhost:8080/api/v1/books | jq ‘.’ curl -H ‘Content-Type: application/json’ -X PUT -d \ ‘{“_id”: 3, “title”: “My Third Book”, “author”: “John Doe”, “description”: “Failed writers club”}’ \ http://localhost:8080/api/v1/books | jq ‘.’ curl http://localhost:8080/api/v1/books | jq ‘.’ curl http://localhost:8080/api/v1/books/_id/1 | jq ‘.’ // 停止和删除测试环境 sudo docker-compose stop sudo docker-compose rm -f // 推送本章的构建结果,两个书店镜像到cd服务器上的镜像库 sudo docker push 10.100.198.200:5000/books-ms sudo docker push 10.100.198.200:5000/books-ms-tests 总结 回顾一下本章的测试步骤,如下图所示: