Golfreeze.packetlove.com: Life style of Golfreeze Canon400D Family kammtan.com Jazz Freebsd Unix Linux System Admin guitar Music
All about unix linux freebsd and FAQ for Packetlove.com Web hosting , Mail hosting , VoIP + IP PBX server => เกี่ยวกับ docker ทุกอย่าง , ci/cd , gitlab, github => Topic started by: golfreeze on สิงหาคม 21, 2016, 04:10:31 pm
-
dockerคืออะไร-ใช้ทำอะไร-มีประโยชน์อย่างไร
สำหรับคนที่เคยทำระบบพวก unix หรือ linux มา แล้วมีพวก application ลงอยู่ในระบบ หรือจะเป็น programmer ที่ต้องการใช้งาน โปรแกรมที่รันด้วยภาษา python , php , java เองก็ตาม เวลาที่เราทำการสร้างระบบ ขึ้นมา เช่น เว็บเซิฟเวอร์ที่รองรับการทำงาน web app ที่รันจาก php , แล้วลง webserver เป็น nginx หรือ apache ก็ตาม ปกติเราก็ต้อง ลง os กับเซิฟเวอร์ โหลด .iso มาลง แล้วทำการติดตั้ง nginx ไม่ก็ apache แล้วก็ติดตั้งภาษา lang : php หรือ python หรือ java เป็นต้น
ถ้ามีหลายระบบก็ต้องลงทีละระบบ อาจจะกินเวลาในการติดตั้งเป็นอาทิตย์ กว่าจะได้เริ่มเทสระบบจริงๆ ซึ่งจะเป็นการเพิ่มขั้นตอน และความสับซ้อนมากขึ้น ครับ ซึ่งตรงจุดนี้เอง docker ได้เข้ามีบทบาทในการแก้ไขปัญหาในจุดนี้ ลดความซับซ้อนในการเตรียมระบบ ซึ่งจะมี images ที่เหล่านักพัฒนานั้นทำไว้ หรือเราสามารถเป็น images แล้วรวมเป็นชุด container ของบริษัทเราเอง แล้วเราสามารถ pull images เหล่านั้นของเรามาใช้งานได้เลย ซึ่งถ้าทำเสร็จแล้ว สามารถ นำ image นี้ไป ลงต่อในเครื่อง Production หรือ เครื่องที่จะเป็น DR-site ได้เลย
ข้อดีของ docker อีกข้อคือ สามารถรองรับการทำงานได้ทั้ง Window OS , Mac OS หรือ Linux OS ซึ่งถ้าใช้คุ้นเคยการทำงานกับ text mode อยู่แล้วก็สามารถลง docker กับเครื่อง linux ได้ เช่นลงบน ubuntu
หรือถ้าท่านใดใช้ mac ก็สามารถติดตั้งโปรแกรม docker ใน mac ได้เลยครับผม
แค่นี้เราก็สามารถ connect เครื่อง client ของเรา กับ docker ได้ละครับ : )
เริ่มต้นด้วยการลง docker ใน ubuntu
https://docs.docker.com/engine/installation/linux/ubuntulinux/
เบื้องต้นสามารถรันใช้งาน docker โดยใช้ user ที่ไม่ใช่ root แต่ต้องเพิ่ม user ให้อยู่ใน group docker ได้ตามนี้
Create the docker group.
$ sudo groupadd docker
Add your user to docker group.
$ sudo usermod -aG docker $USER
แค่นี้ก็จะใช้งาน docker โดยไม่ต้องใส่ sudo แล้วครับ เช่น
เป็นการเรียก image hello-world มาแสดง
$docker run hello-world
จะทำการโหลด image ubuntu ขึ้นมาให้
$docker run -it ubuntu /bin/bash
ทำการเชคดู process ที่เคยรันใน docker
$docker ps -a
จะทำการ exec เข้าไปยัง image ubuntu ที่ทำเอาไว้แล้ว
$docker exec -it ubuntu /bin/bash
หรือถ้าทราบเลข docker id จากการรัน docker ps ก็ทำการ exec เข้าไปยัง docker id = dfwee222ssis ที่ทราบได้ครับ
$docker exec -it dfwee222ssis /bin/bash
-
ปกติแล้วถ้าเว็บเซิฟเวอร์ ทำให้รองรับ jsp จะใช้งานเป็น Jboss ไม่ก็ TomCat ครับ
ก็ขึ้นอยู่กับว่า environment เป็นอย่างไรก็เลือกใช้ตามนั้นนะครับผม
-
The cp command can be used to copy files.
One specific file can be copied TO the container like:
docker cp foo.txt mycontainer:/foo.txt
One specific file can be copied FROM the container like:
docker cp mycontainer:/foo.txt foo.txt
For emphasis, mycontainer is a container ID, not an image ID.
Multiple files contained by the folder src can be copied into the target folder using:
docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target
-
###check docker ps process name and container id
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
acffaed1ba38 dhub-dev.deepinstinctweb.com/dimgmt/appliance-nginx:2.2.1.32 "/bin/sh -c 'envsubs…" 7 weeks ago Up 7 weeks 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4339->4339/tcp, 0.0.0.0:4431->4431/tcp deepinstinct_nginx_1
0e389fa58458 dhub-dev.deepinstinctweb.com/dimgmt/application:2.2.1.32 "celery -P gevent --…" 7 weeks ago Up 7 weeks deepinstinct_dynamic_groups_service_1
##exec into docker name
docker exec deepinstinct_nginx_1 cat /etc/hosts
##delete container id
docker rm container_ID
##docker run attach and detach
docker run dhub-dev.deepinstinctweb.com/dimgmt/appliance-nginx:2.2.1.32
docker run -d dhub-dev.deepinstinctweb.com/dimgmt/appliance-nginx:2.2.1.32
docker attach id
###docker exec into container_name
docker exec -it deepinstinct_nginx_1 /bin/bash
##Second, you can easily start a stopped container running:
$ docker start container_name
##Once the container has been started, you can run your command by:
$ docker exec -it container_name bash -c "mycommand"
###docker run properly command in container_name
docker-compose run web /bin/bash
###docker check disk space
docker system df
###You can restart an existing container after it exited and your changes are still there.
docker start `docker ps -q -l` # restart it in the background
docker attach `docker ps -q -l` # reattach the terminal & stdin
##Create a container to run it later on with required image.
docker create --name <container-name> <image-name>
###Run docker container
###Run the docker container with the required image and specified command / process. ‘-d’ flag is used for running the container in background.
docker run -it -d --name <container-name> <image-name> bash
=====The cp command can be used to copy files.
One specific file can be copied TO the container like:
docker cp foo.txt mycontainer:/foo.txt
One specific file can be copied FROM the container like:
docker cp mycontainer:/foo.txt foo.txt
For emphasis, mycontainer is a container ID, not an image ID.
Multiple files contained by the folder src can be copied into the target folder using:
docker cp src/. mycontainer:/target
docker cp mycontainer:/src/. target
-
docker-compose : การเขียนสคิปเพื่อทำการ automated application เช่นเราเขียนเป็นสคิปเพื่อติดตั้ง LAMP ในระบบก็เขียนใส่ docker-compose.yaml ได้ว่าติดตั้ง apache , php , php-extension , mariadb (database) ตั้งกำหนด path ของ document root หรือ ตั้งรหัส login mysql user อะไร เขียนคอนฟิคใส่ในไฟล์ได้เลย
#cd /home/ubuntu
#mkdir testpkl
#cd testpkl
#vi docker-compose.yaml
====docker-compose.yaml AMP : Apache + Mariadb + Phpmyadmin ====
version: '3'
services:
php-apache:
image: php:7.2.1-apache
ports:
- 80:80
volumes:
- ./DocumentRoot:/var/www/html:z
links:
- 'mariadb'
mariadb:
image: mariadb:10.1
volumes:
- mariadb:/var/lib/mysql
environment:
TZ: "Asia/Bangkok"
MYSQL_ALLOW_EMPTY_PASSWORD: "no"
MYSQL_ROOT_PASSWORD: "rootpwd"
MYSQL_USER: 'testuser'
MYSQL_PASSWORD: 'testpassword'
MYSQL_DATABASE: 'testdb'
volumes:
mariadb:
====docker-compose.yaml AMP : Apache + Mariadb + Phpmyadmin ====
ทำการสร้างโดย
#docker-compose up -d
ถ้าจะให้ดีทำการเปิด tmux ไว้ด้วย หลังจากนั้นก็สามารถเชค docker ps ได้
#docker ps -a
แล้วเข้าสู่ container id นั้น
#docker exec -it container_id /bin/bash
หรือจะทำการ copy file จาก host เข้าไปที่ docker ก็
#cp index.php container_id:/root/.