Docker On Openstack - OSC - v7
Docker On Openstack - OSC - v7
http://www.slideshare.net/osc_hojinkim/docker-on-openstack-by-osc
2015. 3. 12
㈜ 오픈소스컨설팅
김호진
1
25 2개
mainframe
UNIX
LINUX
http://www.redbooks.ibm.com/redbooks/pdfs/sg248199.pdf 2
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
3
왜 Docker on Openstack 인가?
Openstack은 클라우드
인프라 스트럭처에서
제공해 주는 멀티테넌트의 Docker는 높은 이식성,
보안 및 격리, 관리 및 하드웨어, Framework
오픈스택위에 리소스 개수에 따른 매모리 사용률
모니터링, 스토리지 및 독립적인 컨테이너.
네트워킹등은 전반적인
datacenter운영 기반
속도 / 효율성/ 이동성
더 적은 메모리/CPU OVERHEAD
http://docs.openstack.org/juno http://behindtheracks.com/category/juno/ 4
What to do during 30 min.
192.168.0.0/24
http://docs.openstack.org/juno http://behindtheracks.com/category/juno/ 5
What to do during 30 min.
http://docs.openstack.org/juno http://behindtheracks.com/category/juno/ 6
openstack 구축시 log 보는법
기존 log ( /var/log/cinder/scheduler.log)
2015-03-13 03:09:12.360 1148 INFO oslo.messaging._drivers.impl_rabbit [req-844f54aa-6201-4fc4-b321-c6ab2012c296 - -
- - -] Connecting to AMQP server on 192.168.32.181:5672
2015-03-13 03:09:12.433 1148 ERROR oslo.messaging._drivers.impl_rabbit [req-844f54aa-6201-4fc4-b321-c6ab2012c296 -
- - - -] AMQP server on 192.168.32.181:5672 is unreachable: [Errno 111] ECONNREFUSED. Trying again in 3 seconds.
2015-03-13 06:20:18.812 18581 INFO cinder.service [-] Starting cinder-scheduler node (version 2014.2.1)
2015-03-13 06:20:18.816 18581 INFO oslo.messaging._drivers.impl_rabbit [req-1d1a9b9c-3658-4f76-8dc1-3d74b2028a36 -
- - - -] Connecting to AMQP server on 192.168.32.181:5672
2015-03-13 06:20:18.837 18581 INFO oslo.messaging._drivers.impl_rabbit [req-1d1a9b9c-3658-4f76-8dc1-3d74b2028a36 -
- - - -] Connected to AMQP server on 192.168.32.181:5672
2015-03-13 06:20:19.291 18581 INFO oslo.messaging._drivers.impl_rabbit [-] Connecting to AMQP server on
192.168.32.181:5672
2015-03-13 06:20:19.303 18581 INFO oslo.messaging._drivers.impl_rabbit [-] Connected to AMQP server on
192.168.32.181:5672
2015-03-13 06:20:50.814 18581 WARNING cinder.scheduler.host_manager [req-00223525-0c03-4c5d-ae9b-690ae0a10e72
d13d86ad609d4a9a8d9a84b36b954a69 3c40224ㅁ5243f443ebc2aa39605641be1 - - -] volume service is down. (host: juno-
compute)
2015-03-13 06:20:50.814 18581 WARNING cinder.scheduler.filter_scheduler [req-00223525-0c03-4c5d-ae9b-690ae0a10e72
d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 - - -] No weighed hosts found for volume with
properties: {}
2015-03-13 06:20:50.816 18581 ERROR cinder.scheduler.flows.create_volume [req-00223525-0c03-4c5d-ae9b-690ae0a10e72
d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 - - -] Failed to run task
cinder.scheduler.flows.create_volume.ScheduleCreateVolumeTask;volume:create: No valid host was found. No weighed
hosts available
http://docs.openstack.org/juno http://behindtheracks.com/category/juno/ 7
openstack 구축시 log 보는법
Mar 13 06:20:50 juno-controller cinder-api: 2015-03-13 06:20:50.230 18615 INFO cinder.api.v1.volumes [req-
00223525-0c03-4c5d-ae9b-690ae0a10e72 d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 - - -]
Create volume of 2 GB
Mar 13 06:20:50 juno-controller cinder-api: 2015-03-13 06:20:50.620 18615 INFO
oslo.messaging._drivers.impl_rabbit [req-00223525-0c03-4c5d-ae9b-690ae0a10e72
d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 - - -] Connecting to AMQP server on
192.168.32.181:5672
Mar 13 06:20:50 juno-controller cinder-api: 2015-03-13 06:20:50.643 18615 INFO
oslo.messaging._drivers.impl_rabbit [req-00223525-0c03-4c5d-ae9b-690ae0a10e72
d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 - - -] Connected to AMQP server on
192.168.32.181:5672
Mar 13 06:20:50 juno-controller cinder-api: 2015-03-13 06:20:50.686 18615 INFO cinder.api.v1.volumes [req-
00223525-0c03-4c5d-ae9b-690ae0a10e72 d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 - - -]
vol={'migration_status': None, 'availability_zone': 'nova', 'terminated_at': None, 'reservations':
['01680237-32b1-4bcb-a3d4-c17b46837298', 'dd9280a1-7232-4aba-acf0-23aef02c34a9'], 'updated_at': None,
'provider_geometry': None, 'replication_extended_status': None, 'replication_status': 'disabled',
'snapshot_id': None, 'ec2_id': None, 'mountpoint': None, 'deleted_at': None, 'id': '37d5a43a-3f6c-4880-91c6-
7fba7c434211', 'size': 2, 'user_id': u'd13d86ad609d4a9a8d9a84b36b954a69', 'attach_time': None,
'source_replicaid': None, 'attached_host': None, 'display_description': None, 'volume_admin_metadata': [],
'project_id': u'3c402245243f443ebc2aa39605641be1', 'launched_at': None, 'scheduled_at': None, 'status':
'creating', 'volume_type_id': None, 'deleted': False, 'provider_location': None, 'host': None,
'consistencygroup_id': None, 'source_volid': None, 'provider_auth': None, 'display_name': u'test2',
'instance_uuid': None, 'bootable': False, 'created_at': datetime.datetime(2015, 3, 13, 10, 20, 50, 562087),
'attach_status': 'detached', 'volume_type': None, 'consistencygroup': None, 'volume_metadata': [], '_name_id':
None, 'encryption_key_id': None, 'replication_driver_data': None, 'metadata': {}}
Mar 13 06:20:50 juno-controller cinder-api: 2015-03-13 06:20:50.700 18615 INFO cinder.api.openstack.wsgi
[req-00223525-0c03-4c5d-ae9b-690ae0a10e72 d13d86ad609d4a9a8d9a84b36b954a69 3c402245243f443ebc2aa39605641be1 -
- -] http://192.168.32.181:8776/v1/3c402245243f443ebc2aa39605641be1/volumes returned with HTTP 200
http://docs.openstack.org/juno http://behindtheracks.com/category/juno/ 8
Env setting
cat /etc/default/grub
[root@juno-controller ~]# cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="rd.lvm.lv=centos/swap vconsole.font=latarcyrheb-sun16 rd.lvm.lv=centos/root
crashkernel=auto vconsole.keymap=us net.ifnames=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"
9
Env setting
All node
Centos 7 minimum installation
yum -y install epel-release
yum -y install http://rdo.fedorapeople.org/openstack-juno/rdo-release-juno.rpm
yum -y upgrade
#Updated: centos-release.x86_64 0:7-0.1406.el7.centos.2.6
10
Env setting
IP setting
먼저 각 node에서 env.sh를 실행한다. 그리고 아래대로 network-sciprt를 실행한다.
All node
#!/bin/bash #setup hostname
#get primary NIC info cp -f /dev/null /etc/hostname
for i in $(ls /sys/class/net); do
NIC=$i
echo " $THISHOST_NAME " >
MY_MAC=$(cat /sys/class/net/$i/address) /etc/hostname
if [ "$(cat /sys/class/net/$i/ifindex)" == '2' ]; then
#setup the IP configuration for management NIC
echo "$THISHOST_IP
sed -i.bak "s/dhcp/none/g" /etc/sysconfig/network-scripts/ifcfg-$NIC $THISHOST_NAME" >> /etc/hosts
sed -i "s/HWADDR/#HWADDR/g" /etc/sysconfig/network-scripts/ifcfg-$NIC
sed -i "/#HWADDR/a HWADDR=\"$MY_MAC\"" /etc/sysconfig/network-scripts/ifcfg-$NIC
sed -i "s/UUID/#UUID/g" /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "IPADDR=\"$THISHOST_IP\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "PREFIX=\"$THISHOST_NETMASK\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "GATEWAY=\"$THISHOST_GATEWAY\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "DNS1=\"$THISHOST_DNS\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
mv /etc/sysconfig/network-scripts/ifcfg-$NIC.bak .
fi
if [ "$(cat /sys/class/net/$i/ifindex)" == '3' ]; then
#create config file for Tunnel NIC
echo "HWADDR=\"$MY_MAC\"" > /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "TYPE=\"Ethernet\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "BOOTPROTO=\"none\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "IPV4_FAILURE_FATAL=\"no\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "NAME=\"$NIC\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "ONBOOT=\"yes\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "IPADDR=\"$THISHOST_TUNNEL_IP\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "PREFIX=\"$THISHOST_TUNNEL_NETMASK\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
fi
if [ "$(cat /sys/class/net/$i/ifindex)" == '4' ]; then
#create config file for External NIC
echo "HWADDR=\"$MY_MAC\"" > /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "TYPE=\"Ethernet\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "BOOTPROTO=\"none\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "IPV4_FAILURE_FATAL=\"no\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "NAME=\"$NIC\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
echo "ONBOOT=\"yes\"" >> /etc/sysconfig/network-scripts/ifcfg-$NIC
fi
done
11
CONTROLLER NODE SETTING
Openstack DB setting
controller node = controller + MariaDB,RabbitMQ,Glance,NOVA api/scheduler,Neutron api, cinder api
egrep -v "^#|^$" /etc/my.cnf
12
CONTROLLER NODE SETTING
Openstack DB 생성
database 생성 및 권한 설정
mysql -u root -p <<EOF
CREATE DATABASE nova;
CREATE DATABASE cinder;
CREATE DATABASE glance;
CREATE DATABASE keystone;
CREATE DATABASE neutron;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'localhost' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '$SERVICE_PWD';
GRANT ALL PRIVILEGES ON neutron.* TO 'neutron'@'%' IDENTIFIED BY '$SERVICE_PWD';
FLUSH PRIVILEGES;
EOF
Messaging server
yum -y install rabbitmq-server
systemctl enable rabbitmq-server.service
systemctl start rabbitmq-server.service
systemctl status rabbitmq-server.service
13
egrep -v "^#|^$" /etc/keystone/keystone.conf
keystone 설치
keystone은 인증을 위한 서비스
yum -y install openstack-keystone python-keystoneclient
#edit /etc/keystone.conf
sed -i.bak [DEFAULT]
"s/#admin_token=ADMIN/admin_token=$ADMIN_TOKEN/g" # admin token 설정
/etc/keystone/keystone.conf admin_token=ADMIN
[database]
sed -i "/\[database\]/a \ # database 접근 정보
connection =
mysql://keystone:$SERVICE_PWD@$CONTROLLER_IP/keyston
connection =
e" /etc/keystone/keystone.conf mysql://keystone:[email protected]/keyston
e
sed -i "/\[token\]/a \ [token]
provider = keystone.token.providers.uuid.Provider\n\ #uuid token provider와 sql driver 정의
driver = provider =
keystone.token.persistence.backends.sql.Token\n" keystone.token.providers.uuid.Provider
/etc/keystone/keystone.conf
sed -i "/\[revoke\]/a \ driver =
driver = keystone.token.persistence.backends.sql.Token
keystone.contrib.revoke.backends.sql.Revoke\n"
/etc/keystone/keystone.conf
14
CONTROLLER NODE SETTING
15
CONTROLLER NODE SETTING
All node
echo "export OS_TENANT_NAME=admin" > keystonerc_admin
echo "export OS_USERNAME=admin" >> keystonerc_admin
echo "export OS_PASSWORD=$ADMIN_PWD" >> keystonerc_admin
echo "export OS_AUTH_URL=http://$CONTROLLER_IP:35357/v2.0">> keystonerc_admin
source keystonerc_admin
keystone user-list
keystone user-role-list
keystone tenant-list
keystone token-get
16
egrep -v "^#|^$" /etc/glance/glance-api.conf
#start glance
su -s /bin/sh -c "glance-manage db_sync" glance
systemctl enable openstack-glance-api.service openstack-glance-registry.service
systemctl start openstack-glance-api.service openstack-glance-registry.service
#upload the cirros image to glance
yum -y install wget
wget http://cdn.download.cirros-cloud.net/0.3.3/cirros-0.3.3-x86_64-disk.img
glance image-create --name "cirros-0.3.3-x86_64" --file cirros-0.3.3-x86_64-disk.img \
--disk-format qcow2 --container-format bare --is-public True --progress
glance image-create --name 'centos7' --disk-format qcow2 --container-format bare --is-public true \--copy-
from http://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud-20141129_01.qcow2
glance image-list
18
CONTROLLER NODE SETTING
#install the nova controller components (To install and configure Compute controller components)
yum -y install openstack-nova-api openstack-nova-cert openstack-nova-conductor \
openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler \
python-novaclient
19
CONTROLLER NODE SETTING
20
CONTROLLER NODE SETTING
nova 서비스 구동
#start nova
su -s /bin/sh -c "nova-manage db sync" nova
Neutron 서버 설치
#install neutron
yum -y install openstack-neutron openstack-neutron-ml2 python-neutronclient
21
CONTROLLER NODE SETTING
22
CONTROLLER NODE SETTING
#edit /etc/neutron/plugins/ml2/ml2_conf.ini
#edit /etc/neutron/plugins/ml2/ml2_conf.ini [ml2]
sed -i "/\[ml2\]/a \ type_drivers = flat,gre
type_drivers = flat,gre\n\ tenant_network_types = gre
tenant_network_types = gre\n\ mechanism_drivers = openvswitch
mechanism_drivers = openvswitch" [ml2_type_gre]
/etc/neutron/plugins/ml2/ml2_conf.ini tunnel_id_ranges = 1:1000
[securitygroup]
sed -i "/\[ml2_type_gre\]/a \ enable_security_group = True
tunnel_id_ranges = 1:1000" enable_ipset = True
/etc/neutron/plugins/ml2/ml2_conf.ini firewall_driver =
neutron.agent.linux.iptables_firewall.OVSHybridIptablesFire
sed -i "/\[securitygroup\]/a \ wallDriver
enable_security_group = True\n\
enable_ipset = True\n\
firewall_driver =
neutron.agent.linux.iptables_firewall.OVSHybridIptablesFir
ewallDriver" /etc/neutron/plugins/ml2/ml2_conf.ini
#start neutron
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
su -s /bin/sh -c "neutron-db-manage --config-file /etc/neutron/neutron.conf \
--config-file /etc/neutron/plugins/ml2/ml2_conf.ini upgrade juno" neutron
systemctl restart openstack-nova-api.service openstack-nova-scheduler.service \
openstack-nova-conductor.service
systemctl enable neutron-server.service
systemctl start neutron-server.service
23
CONTROLLER NODE SETTING egrep -v "^#|^$" /etc/openstack-dashboard/local_settings
#edit /etc/openstack-dashboard/local_settings
sed -i.bak "s/ALLOWED_HOSTS = \['horizon.example.com', ALLOWED_HOSTS = ['*']
'localhost'\]/ALLOWED_HOSTS = ['*']/" /etc/openstack- OPENSTACK_HOST = "192.168.32.181"
dashboard/local_settings
sed -i 's/OPENSTACK_HOST = "127.0.0.1"/OPENSTACK_HOST =
"'"$CONTROLLER_IP"'"/' /etc/openstack-
dashboard/local_settings
#start dashboard
setsebool -P httpd_can_network_connect on
chown -R apache:apache /usr/share/openstack-dashboard/static
systemctl enable httpd.service memcached.service
systemctl start httpd.service memcached.service
24
CONTROLLER NODE SETTING
keystone endpoint-create \
--service-id $(keystone service-list | awk '/ volume / {print $2}') \
--publicurl http://$CONTROLLER_IP:8776/v1/%\(tenant_id\)s \
--internalurl http://$CONTROLLER_IP:8776/v1/%\(tenant_id\)s \
--adminurl http://$CONTROLLER_IP:8776/v1/%\(tenant_id\)s \
--region regionOne
keystone endpoint-create \
--service-id $(keystone service-list | awk '/ volumev2 / {print $2}') \
--publicurl http://$CONTROLLER_IP:8776/v2/%\(tenant_id\)s \
--internalurl http://$CONTROLLER_IP:8776/v2/%\(tenant_id\)s \
--adminurl http://$CONTROLLER_IP:8776/v2/%\(tenant_id\)s \
--region regionOne
#install cinder controller
yum -y install openstack-cinder python-cinderclient python-oslo-db
25
egrep -v "^#|^$" /etc/cinder/cinder.conf
26
CONTROLLER NODE SETTING
27
NETWORK NODE
28
NETWORK NODE
#edit /etc/neutron/neutron.conf
sed -i '0,/\[DEFAULT\]/s//\[DEFAULT\]\ [DEFAULT]
rpc_backend = rabbit\ rpc_backend = rabbit
rabbit_host = '"$CONTROLLER_IP"'\ rabbit_host = 192.168.0.181
auth_strategy = keystone\ auth_strategy = keystone
core_plugin = ml2
core_plugin = ml2\ service_plugins = router
service_plugins = router\ allow_overlapping_ips = True
allow_overlapping_ips = True/'
/etc/neutron/neutron.conf [matchmaker_redis]
sed -i "/\[keystone_authtoken\]/a \
auth_uri = http://$CONTROLLER_IP:5000/v2.0\n\ [keystone_authtoken]
identity_uri = http://$CONTROLLER_IP:35357\n\ auth_uri = http://192.168.0.181:5000/v2.0
identity_uri = http://192.168.0.181:35357
admin_tenant_name = service\n\ admin_tenant_name = service
admin_user = neutron\n\ admin_user = neutron
admin_password = $SERVICE_PWD" admin_password = service
/etc/neutron/neutron.conf
#edit /etc/neutron/l3_agent.ini
sed -i "/\[DEFAULT\]/a \ [DEFAULT]
interface_driver = interface_driver =
neutron.agent.linux.interface.OVSInterfaceDriver\n\
use_namespaces = True\n\ neutron.agent.linux.interface.OVSInterfaceDriver
external_network_bridge = br-ex" use_namespaces = True
/etc/neutron/l3_agent.ini external_network_bridge = br-ex
29
NETWORK NODE
#edit /etc/neutron/plugins/ml2/ml2_conf.ini
sed -i "/\[ml2\]/a \ [ml2]
type_drivers = flat,gre\n\ type_drivers = flat,gre
tenant_network_types = gre\n\ tenant_network_types = gre
mechanism_drivers = openvswitch" mechanism_drivers = openvswitch
/etc/neutron/plugins/ml2/ml2_conf.ini [ml2_type_flat]
sed -i "/\[ml2_type_flat\]/a \ flat_networks = external
flat_networks = external" [ml2_type_vlan]
/etc/neutron/plugins/ml2/ml2_conf.ini [ml2_type_gre]
sed -i "/\[ml2_type_gre\]/a \ tunnel_id_ranges = 1:1000
tunnel_id_ranges = 1:1000" [ml2_type_vxlan]
/etc/neutron/plugins/ml2/ml2_conf.ini [securitygroup]
sed -i "/\[securitygroup\]/a \ enable_security_group = True
enable_security_group = True\n\ enable_ipset = True
enable_ipset = True\n\ firewall_driver =
firewall_driver = neutron.agent.linux.iptables_firewall.OVSHybridIp
neutron.agent.linux.iptables_firewall.OVSHybridI tablesFirewallDriver
ptablesFirewallDriver\n\ [ovs]
[ovs]\n\
local_ip = $THISHOST_TUNNEL_IP\n\ local_ip = 192.168.33.182
enable_tunneling = True\n\ enable_tunneling = True
bridge_mappings = external:br-ex\n\ bridge_mappings = external:br-ex
[agent]\n\ [agent]
tunnel_types = gre" tunnel_types = gre
/etc/neutron/plugins/ml2/ml2_conf.ini
30
NETWORK NODE
#edit /etc/neutron/dhcp_agent.ini
31
egrep -v "^#|^$" /etc/neutron/metadata_agent.ini
NETWORK NODE
metadata_agent 정보 입력
#edit /etc/neutron/metadata_agent.ini
sed -i "s/auth_url/#auth_url/g" [DEFAULT]
/etc/neutron/metadata_agent.ini auth_url = http://192.168.32.181:5000/v2.0
sed -i "s/auth_region/#auth_region/g" auth_region = regionOne
/etc/neutron/metadata_agent.ini admin_tenant_name = service
sed -i admin_user = neutron
"s/admin_tenant_name/#admin_tenant_name/g" admin_password = service
/etc/neutron/metadata_agent.ini nova_metadata_ip = 192.168.32.181
sed -i "s/admin_user/#admin_user/g" metadata_proxy_shared_secret = meta123
/etc/neutron/metadata_agent.ini
sed -i "s/admin_password/#admin_password/g"
/etc/neutron/metadata_agent.ini
sed -i "/\[DEFAULT\]/a \
auth_url = http://$CONTROLLER_IP:5000/v2.0\n\
auth_region = regionOne\n\
admin_tenant_name = service\n\
admin_user = neutron\n\
admin_password = $SERVICE_PWD\n\
nova_metadata_ip = $CONTROLLER_IP\n\
metadata_proxy_shared_secret = $META_PWD"
/etc/neutron/metadata_agent.ini
32
NETWORK NODE
NIC 외부네트웍 연결
33
NETWORK NODE
외부 nework setting
[root@net01 network-scripts]# cat ifcfg-br-ex [root@net01 network-scripts]# cat ifcfg-eth2
TYPE=OVSIntPort #HWADDR=00:19:99:D5:AA:D0
OVS_BRIDGE=br-ex TYPE=OVSPort
DEVICETYPE=ovs DEVICETYPE=ovs
BOOTPROTO=none OVS_BRIDGE=br-ex
IPADDR0=192.168.0.182 BOOTPROTO=none
PREFIX0=24 NAME=eth2
DEFROUTE=yes #UUID=33d13b63-9eba-4414-996a-75391a71fc6a
IPV4_FAILURE_FATAL=no DEVICE=eth2
IPV6INIT=yes ONBOOT=yes
IPV6_AUTOCONF=no
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=br-ex
#UUID=33d13b63-9eba-4414-996a-75391a71fc6a
DEVICE=br-ex
ONBOOT=yes
GATEWAY=192.168.0.1
DNS1=8.8.8.8
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
cp /usr/lib/systemd/system/neutron-openvswitch-agent.service \
/usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' \
/usr/lib/systemd/system/neutron-openvswitch-agent.service
34
NETWORK NODE
서비스 활성화
35
COMPUTE NODE
36
COMPUTE NODE
openstack-neutron-ml2 openstack-neutron-openvswitch
#install neutron
yum -y install openstack-neutron-ml2 openstack-neutron-openvswitch
#edit /etc/neutron/neutron.conf
38
COMPUTE NODE
openstack-neutron-ml2 openstack-neutron-openvswitch
#edit /etc/neutron/plugins/ml2/ml2_conf.ini
[ml2]
sed -i "/\[ml2\]/a \ type_drivers = flat,gre
type_drivers = flat,gre\n\ tenant_network_types = gre
tenant_network_types = gre\n\ mechanism_drivers = openvswitch
mechanism_drivers = openvswitch"
[ml2_type_gre]
/etc/neutron/plugins/ml2/ml2_conf.ini
tunnel_id_ranges = 1:1000
sed -i "/\[ml2_type_gre\]/a \
[securitygroup]
tunnel_id_ranges = 1:1000"
enable_security_group = True
/etc/neutron/plugins/ml2/ml2_conf.ini
enable_ipset = True
sed -i "/\[securitygroup\]/a \
firewall_driver =
enable_security_group = True\n\
neutron.agent.linux.iptables_firewall.OVSHybridIp
enable_ipset = True\n\
tablesFirewallDriver
firewall_driver =
neutron.agent.linux.iptables_firewall.OVSHybridI [ovs]
ptablesFirewallDriver\n\ local_ip = 192.168.33.183
[ovs]\n\ enable_tunneling = True
local_ip = $THISHOST_TUNNEL_IP\n\ [agent]
enable_tunneling = True\n\ tunnel_types = gre
[agent]\n\
tunnel_types = gre"
/etc/neutron/plugins/ml2/ml2_conf.ini
39
egrep -v "^#|^$" /etc/nova/nova.conf
COMPUTE NODE
nova-compute node 구성
/etc/nova/nova.conf
#edit /etc/nova/nova.conf
[neutron]
sed -i "/\[neutron\]/a \ url = http://192.168.32.181:9696
url = http://$CONTROLLER_IP:9696\n\ auth_strategy = keystone
auth_strategy = keystone\n\ admin_auth_url = http://192.168.32.181:35357/v2.0
admin_auth_url = admin_tenant_name = service
http://$CONTROLLER_IP:35357/v2.0\n\ admin_username = neutron
admin_tenant_name = service\n\ admin_password = service
admin_username = neutron\n\
admin_password = $SERVICE_PWD"
/etc/nova/nova.conf
ln -s /etc/neutron/plugins/ml2/ml2_conf.ini /etc/neutron/plugin.ini
cp /usr/lib/systemd/system/neutron-openvswitch-agent.service \
/usr/lib/systemd/system/neutron-openvswitch-agent.service.orig
sed -i 's,plugins/openvswitch/ovs_neutron_plugin.ini,plugin.ini,g' \
/usr/lib/systemd/system/neutron-openvswitch-agent.service
40
egrep -v "^#|^$" /etc/cinder/cinder.conf
COMPUTE NODE
Cinder 디스크추가
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
yum -y install openstack-cinder targetcli python-oslo-db MySQL-python
#edit /etc/cinder/cinder.conf
sed -i.bak "/\[database\]/a connection = [DEFAULT]
mysql://cinder:$SERVICE_PWD@$CONTROLLER_IP/cinde rpc_backend = rabbit
r" /etc/cinder/cinder.conf rabbit_host = 192.168.32.181
sed -i '0,/\[DEFAULT\]/s//\[DEFAULT\]\ auth_strategy = keystone
rpc_backend = rabbit\ my_ip = 192.168.32.183
rabbit_host = '"$CONTROLLER_IP"'\ iscsi_helper = lioadm
auth_strategy = keystone\ [database]
my_ip = '"$THISHOST_IP"'\ connection =
iscsi_helper = lioadm/' /etc/cinder/cinder.conf mysql://cinder:[email protected]/cinder
sed -i "/\[keystone_authtoken\]/a \ [keystone_authtoken]
auth_uri = http://$CONTROLLER_IP:5000/v2.0\n\
auth_uri = http://192.168.32.181:5000/v2.0
identity_uri = http://$CONTROLLER_IP:35357\n\
identity_uri = http://192.168.32.181:35357
admin_tenant_name = service\n\
admin_tenant_name = service
admin_user = cinder\n\
admin_user = cinder
admin_password = $SERVICE_PWD"
admin_password = service
/etc/cinder/cinder.conf
41
egrep -v "^#|^$" /etc/cinder/cinder.conf
COMPUTE NODE
Cinder 디스크추가
42
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
43
What to do during 20 min.
OpenStack vm 생성
기본적인 vm 생성 방법
neturon network 생성
라우터 생성
게이트웨이 설정
내부 인터페이스 추가
인스턴스 생성
http://docs.openstack.org/juno http://behindtheracks.com/category/juno/ 44
Network만들기
Network 생성 / 외부 subnet 생성
neutron net-create ext-net --shared --router:external True
[root@juno-controller ~]# Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 74cea9a5-434c-4bff-89b7-a1e503b43d39 |
| name | ext-net |
| provider:network_type | gre |
| provider:physical_network | |
| provider:segmentation_id | 2 |
| router:external | True |
| shared | True |
| status | ACTIVE |
| subnets | |
| tenant_id | e7cb7856091d4d839031d79582c93a76 |
+---------------------------+--------------------------------------+
45
Network만들기
내부 network 생성 / 내부 subnet 생성
neutron net-create admin-net
Created a new network:
+---------------------------+--------------------------------------+
| Field | Value |
+---------------------------+--------------------------------------+
| admin_state_up | True |
| id | 666c4f98-2a42-46a0-838c-0a82f7335585 |
| name | admin-net |
| provider:network_type | gre |
| provider:physical_network | |
| provider:segmentation_id | 1 |
| router:external | False |
| shared | False |
| status | ACTIVE |
| subnets | |
| tenant_id | e7cb7856091d4d839031d79582c93a76 |
+---------------------------+--------------------------------------+
46
Network만들기
라우터 생성 / 외부라우터 연결
neutron router-create admin-router
Created a new router:
+-----------------------+--------------------------------------+
| Field | Value |
+-----------------------+--------------------------------------+
| admin_state_up | True |
| distributed | False |
| external_gateway_info | |
| ha | False |
| id | 14e32baa-bab5-4f72-9f19-ebd00f5d3671 |
| name | admin-router |
| routes | |
| status | ACTIVE |
| tenant_id | e7cb7856091d4d839031d79582c93a76 |
+-----------------------+--------------------------------------+
47
Network만들기
Vm생성
neutron router-interface-add admin-router admin-subnet
48
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
49
What to do during 30 min.
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
| |
__ | __ __ | _ __ _
/ \| / \ / |/ / _\ |
\__/| \__/ \__ |\_ \__ |
50
51
52
Getting Started with Docker Hub.
Docker Hub
53
Installing Docker on CentOS 7
.
Hostname setting
Docker install / Docker start 등록 / 최신버전 update
#env setting
export LANG=en_US.UTF-8;
#hostname setting
yes | cp -f /dev/null /etc/hostname;echo "docker" > /etc/hostname ; hostname;
systemctl disable firewalld; systemctl stop firewalld
#repo copy
scp 192.168.0.220:/etc/yum.repos.d/osc.repo /etc/yum.repos.d/osc.repo
#docker installation/setting
yum -y install update > /dev/null ; yum -y install docker; systemctl enable docker;
systemctl start docker; systemctl status docker | grep Active
54
.
Downloading container images & Running Docker Containers
55
.
Downloading container images & Running Docker Containers
Docker info
56
.
Run your new image [ Dockerizing Applications ]
출처 : https://docs.docker.com/userguide/usingdocker/
57
.
Run your new image [ Dockerizing Applications ]
[root@docker ~]# docker inspect osc / docker stop osc / docker kill osc
58
.
Think/Think/Think
#images /var/lib/docker/conatiner
[root@docker docker]# cd conatainers/61fe6bea107205c3ba9bfe9*
61fe6bea107205c3ba9bfe998e506297797f0491d6bbe32664f5db261641c5ee]# ls
61feXX-json.log config.json hostconfig.json hostname hosts resolv.conf
secrets
59
.
Running a Web Application in Docker
training/webapp
[root@docker01 ~]# docker run -d -P training/webapp python app.py # -d, --
detach=false /
[root@docker01 ~]# docker ps -l
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
489160dbba6b training/webapp:latest "python app.py" 5 minutes
ago Up 5 minutes 0.0.0.0:49154->5000/tcp serene_heisenberg
[root@docker01 ~]# docker logs -f cocky_hopper
* Running on http://0.0.0.0:5000/
192.168.0.4 - - [28/Feb/2015 22:14:54] "GET / HTTP/1.1" 200 -
192.168.0.4 - - [28/Feb/2015 22:14:55] "GET /favicon.ico HTTP/1.1" 404 -
60
.
Running a Web Application in Docker
Inspect training/webapp
[root@docker01 ~]# docker top cocky_hopper
UID PID PPID C
STIME TTY TIME CMD
root 7544 3689 0
17:12 ? 00:00:00 python app.py
[root@docker01 ~]# docker inspect cocky_hopper
"Cmd": [
"python",
"app.py"
"ExposedPorts": {
"5000/tcp": {}
"Hostname": "999cdee2c894",
"Image": "training/webapp",
"Name": "/cocky_hopper",
"NetworkSettings": {
"Gateway": "172.17.42.1",
"IPAddress": "172.17.0.19",
"IPPrefixLen": 16,
"Ports": {
"5000/tcp": [
"HostIp": "0.0.0.0",
"HostPort": "49154"
61
.Managing Data in Containers
62
.
Making images ( 2 methods)
From container
[root@docker01 ~]# docker run -t -i training/sinatra /bin/bash
Status: Downloaded newer image for training/sinatra:latest
root@62f680cfd5a4:/# gem install json ;exit
Fetching: json-1.8.2.gem (100%)
exit
[root@docker01 ~]# docker ps -l
CONTAINER
ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
62f680cfd5a4 training/sinatra:latest "/bin/bash" 9 minutes
ago Exited (0) About a minute ago angry_yonath
63
.
Making images ( 2 methods)
From Dockerfile
[root@docker wget]# cat Dockerfile [root@docker wget]# docker build -
# for the technet seminar by hojin kim t="oscinfra/centos:intall_wget" .
FROM oscinfra/centos:tool Sending build context to Docker daemon 2.56 kB
MAINTAINER hojin kim "[email protected]" Sending build context to Docker daemon
RUN yum install -y wget
RUN mkdir /root/wget Step 0 : FROM oscinfra/centos:latest
EXPOSE 22 # default port ---> 403871a8320a
Step 1 : MAINTAINER hojin kim "[email protected]"
---> Running in 4c4bc393c67e
[root@docker]# docker images ---> 8cc5127c853a
REPOSITORY TAG IMAGE ID
CREATED VIRTUAL SIZE Removing intermediate container 4c4bc393c67e
oscinfra/centos intall_wgeet Step 2 : RUN yum install -y wget
c945ac8f8743 19 seconds ago 379.9 MB ---> Running in 2ca7b10b283a
oscinfra/centos tool
1f06057f9152 24 minutes ago 366.5 MB Loaded plugins: fastestmirror
oscinfra/centos latest
403871a8320a 26 minutes ago 366.5 MB Installed:
wget.x86_64 0:1.14-10.el7_0.1
[root@docker ~]# docker push
oscinfra/centos:tool Complete!
The push refers to a repository
---> 3bbded5a9761
[oscinfra/centos] (len: 1)
Sending image list Removing intermediate container 2ca7b10b283a
Pushing repository oscinfra/centos (1 tags) Step 3 : RUN mkdir /root/wget
---> Running in 2de6060b4562
---> 6ba1987b89a7
Removing intermediate container 2de6060b4562
Step 4 : EXPOSE 22
---> Running in 59d051bb382d
---> c945ac8f8743
Removing intermediate container 59d051bb382d
Successfully built c945ac8f874
64
.
Push your image to the Docker Hub Registry
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
| |
__ | __ __ | _ __ _
/ \| / \ / |/ / _\ |
\__/| \__/ \__ |\_ \__ |
65
.
Docker Compose
66
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
67
What to do during 20 min.
Docker + openstack
Docker와 openstack의 연동 필요성
Docker와 openstack을 연동하기
출처 : https://wiki.openstack.org/wiki/Docker
68
Connect to Openstack
Docker prerequsite
Install python-pip/git/gcc/wget/lynx
Install Oslo.log
yum install -y python-pip git gcc wget
yum install -y docker
usermod -G docker nova
service openstack-nova-compute restart
pip install pbr
wget https://pypi.python.org/packages/source/o/oslo.log/oslo.log-
0.4.0.tar.gz#md5=e02b6feebe849c8bae50b5c329f7a9e0
tar -xvf oslo.log-0.4.0.tar.gz
cd ./oslo.log-0.4.0
python setup.py install ; pip install pbr
Nova-docker
Install nova-docker
git checkout stable/juno
69
Change openstack setting
Setting env
chmod 666 /var/run/docker.sock
mkdir /etc/nova/rootwrap.d
cat /etc/nova/rootwrap.d/docker.filters
# nova-rootwrap command filters for setting up network in the docker driver
# This file should be owned by (and only-writeable by) the root user
[Filters]
# nova/virt/docker/driver.py: 'ln', '-sf', '/var/run/netns/.*'
ln: CommandFilter, /bin/ln, root
70
Make glance image
Setting env
check docker
Check the openstack
71
Check the status
Setting env
72
Check the status
73
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
74
What to do during 30 min.
75
What to do during 30 min.
76
What to do during 30 min.
77
What to do during 30 min.
수정 후 이미지 commit하기
78
Getting started with Compose and Wordpress
79
Getting started with Compose and Wordpress
80
Getting started with Compose and Wordpress
require_once(ABSPATH . 'wp-settings.php');
81
Getting started with Compose and Wordpress
82
Getting started with Compose and Wordpress
83
Nginx website
Nginx dockerfile
Dockerfile
#Dockerfile #global.conf
EXPOSE 80
84
Nginx website
Nginx dockerfile
nginx.conf
#nginx.conf #index.html
<head>
user www-data; <title>Test website</title>
worker_processes 4; </head>
pid /run/nginx.pid; <body>
daemon off; <h1>This is a test website</h1>
</body>
events { }
dd
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
}
85
Nginx website
Nginx dockerfile
nginx.conf
Dockerfile
nginx:
global.conf nginx.conf
website:
index.html
[root@docker nginx]#
docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website oscinfra/nginx nginx
86
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
87
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | c343cc7afce50d264640f3238943c6de |
| container_format | docker |
| created_at | 2015-03-11T06:12:39 |
| deleted | False |
| deleted_at | None |
| disk_format | raw |
| id | 570f59ed-a227-43b7-9be1-3ad9b85f49a7 |
| is_public | True |
| min_disk | 0 |
| min_ram | 0 |
| name | tutum/wordpress |
| owner | 3c402245243f443ebc2aa39605641be1 |
| protected | False |
| size | 492773376 |
| status | active |
| updated_at | 2015-03-11T06:14:19 |
| virtual_size | None |
+------------------+--------------------------------------+
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
88
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
glance image
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
89
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
90
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
웹서비스 창
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
91
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
웹 서비스 창
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
92
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
+------------------+--------------------------------------+
| Property | Value |
+------------------+--------------------------------------+
| checksum | fa22fdac9cfda75cb9ecf67ed6d974c1 |
| container_format | docker |
| created_at | 2015-03-11T08:59:20 |
| deleted | False |
| deleted_at | None |
| disk_format | raw |
| id | 54c5a2f8-e1ae-475d-9eb6-0be8c38315f4 |
| is_public | True |
| min_disk | 0 |
| min_ram | 0 |
| name | tutum/mysql:latest |
| owner | 3c402245243f443ebc2aa39605641be1 |
| protected | False |
| size | 332313600 |
| status | active |
| updated_at | 2015-03-11T09:00:18 |
| virtual_size | None |
+------------------+--------------------------------------+
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
93
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
glance image
+--------------------------------------+---------------------+-------------+------------------+-----------+--------+
| ID | Name | Disk Format | Container Format | Size | Status |
+--------------------------------------+---------------------+-------------+------------------+-----------+--------+
| 707b9dfc-68e4-4a9c-b7bc-708127473a56 | centos7 | qcow2 | bare | 989069312 | active |
| 43d87a3d-e1da-4eac-86d3-33a8a4a0e62d | cirros-0.3.3-x86_64 | qcow2 | bare | 13200896 | active |
| 54c5a2f8-e1ae-475d-9eb6-0be8c38315f4 | tutum/mysql:latest | raw | docker | 332313600 | active |
| 570f59ed-a227-43b7-9be1-3ad9b85f49a7 | tutum/wordpress | raw | docker | 492773376 | active |
+--------------------------------------+---------------------+-------------+------------------+-----------+--------+
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
94
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
mysql contact
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
95
Openstack 위에 Docker로 WEB서비스 구축 [ 15분]
mysql connect
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)
출처 ㅣ: Xen Virtualization on Linux and Solaris : Running Nova-Docker on OpenStack RDO Juno (CentOS 7)
96
Contents
2. Openstack 위에 VM 생성 [ 20분 ]
3. docker 구축 기초 [ 30분]
97
What to do during 30 min.
Jenkins /가상환경
Jenkins(자동빌드)
Cobertura(동적분석)
98
Change openstack setting
99
Change openstack setting
dockerjenkins.sh
root@ubuntu:~/jenkins# cat dockerjenkins.sh # Now, close extraneous file descriptors.
#!/bin/bash pushd /proc/self/fd
# First, make sure that cgroups are mounted for FD in *
correctly. do
CGROUP=/sys/fs/cgroup case "$FD" in
# Keep stdin/stdout/stderr
[ -d $CGROUP ] || [012])
mkdir $CGROUP ;;
mountpoint -q $CGROUP || # Nuke everything else
mount -n -t tmpfs -o uid=0,gid=0,mode=0755 *)
cgroup $CGROUP || { eval exec "$FD>&-"
echo "Could not make a tmpfs mount. Did ;;
you use -privileged?" esac
exit 1 done
}
popd
# Mount the cgroup hierarchies exactly as they
are in the parent system. docker -d &
for SUBSYS in $(cut -d: -f2 /proc/1/cgroup) exec java -jar /opt/jenkins/jenkins.war
do
[ -d $CGROUP/$SUBSYS ] || mkdir
$CGROUP/$SUBSYS
mountpoint -q $CGROUP/$SUBSYS || name error가 발생하여.
mount -n -t cgroup -o $SUBSYS cgroup DEBIAN_FRONTEND=noninteractive 후
$CGROUP/$SUBSYS apt-get install lxc-docker 수행
done
100
Change openstack setting
Build
root@ubuntu:~/jenkins# docker build -t khoj/dockerjenkins . Sending
build context to Docker daemon 4.096 kB
Sending build context to Docker daemon
Removing intermediate container 8b902e230d08
Successfully built ab6d4f9c8830
root@ubuntu:~/jenkins# docker image
docker: 'image' is not a docker command. See 'docker --help'.
root@ubuntu:~/jenkins# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
khoj/dockerjenkins latest ab6d4f9c8830 8 seconds ago 581.2 MB
ubuntu 14.04 2d24f826cb16 8 days ago 188.3 MB
ubuntu latest 2d24f826cb16 8 days ago 188.3 MB
101
Change openstack setting
Build
102
Change openstack setting
Excute shell
# Build the image to be used for this job.
IMAGE=$(docker build . | tail -1 | awk '{ print $NF }')
# Exit with the same value as that with which the process exited.
exit $RC
104
Change openstack setting
success
105
25 2개
mainframe
UNIX
LINUX
http://www.redbooks.ibm.com/redbooks/pdfs/sg248199.pdf 106
107