2021年5月24日 星期一

Docker入門教學02_筆記與心得

 文章分成

Docker入門教學01_筆記與心得

一、shell快速完成安裝docker
二、建立一個Docker版的Node.js程式,並完成部署與分享
三、利用ENTRYPOINT進行指定的程序
四、建立一個Nginx的Web服務器

Docker入門教學02_筆記與心得

五、建立Python3.8的開發環境
六、建立PostgreSql資料庫
七、使用pgadmin4管理PostgreSQL資料庫
八、建立自己的快取Redis

Docker入門教學03_筆記與心得

九、Docker Compose
十、Flask+Redis多服務開發部署
十一、建立Vue開發環境

五、建立Python3.8的開發環境

觀念:

1.建立Python3.8的開發環境

實戰:

1.到Docker Hub,找所需的image

2.下載到本機
$sudo docker pull python:3.8.0-alpine3.10

3.進入 python 3.8.0 互動式視窗
$sudo docker container run --rm -it python:3.8.0-alpine3.10
>>> exit()

4.確認linux版本、pip與python 版本
$sudo docker container run --rm -it python:3.8.0-alpine3.10 cat /etc/os-release
$sudo docker container run --rm -it python:3.8.0-alpine3.10 pip -V
$sudo docker container run --rm -it python:3.8.0-alpine3.10 python -V

5.執行本機的python程式
$mkdir docker
$cd docker
$pico test.py
其內容為:
import numpy as np
myarray = np.array([1,2,3,4,5])
print(myarray)

(1)執行test.py
$sudo docker container run --rm -it -v /home/webadmin/docker:/workfolder:ro python:3.8.0-alpine3.10 python /workfolder/test.py
現在出現問題:ModuleNotFoundError: No module named 'numpy'
因為python:3.8.0-alpine3.10這個image功能有限,所以改用python:3.8.0
如何做?
A.建立Dockerfile
$pico Dockerfile
內容為
FROM python:3.8
 
RUN pip3 install numpy
RUN mkdir -p /workfolder
COPY ./test.py /workfolder/
 
CMD [ "python","/workfolder/test.py" ]
B.建立image
$sudo docker image build -t testpython:v01 .
$sudo docker image ls
C.容器運行  
$sudo docker container run --rm -it testpython:v01

六、建立PostgreSql資料庫

觀念:
利用 docker image 建立PostgreSql資料庫,使用版本9.6.20
實戰:



3.指令:
安裝postgres:9.6.20-alpine
$ sudo docker pull postgres:9.6.20-alpine

啟動PostgresSql資料庫 - webdb 帳號:webadmin 密碼:demo1234
$ sudo docker run --name webdb -p 5432:5432 -e POSTGRES_USER=webadmin -e POSTGRES_PASSWORD=demo1234 -d  postgres:9.6.20-alpine
Docker container 列表
$ sudo docker container ls 
檢查本機開放那些port
$ nmap 127.0.0.1
連接PostgreSql
$ psql -h localhost -U webadmin
查詢有多少資料表
webadmin=# select * from pg_tables;

離開PostgreSQL
webadmin=# \q
停止資料庫
$ sudo docker stop webdb
檢查本機開放那些port
$ nmap 127.0.0.1
Docker container 列表
$ sudo docker container ls 
 Docker container 列表
$ sudo docker container ls -a

啟動資料庫
$sudo docker start webdb
執行資料庫的bash
$sudo docker exec -it webdb /bin/bash
bash-5.0# cd /var/lib/postgresql/data
bash-5.0# ls
bash-5.0# cat pg_hba.conf

bash-5.0# cat postgresql.conf
bash-5.0# exit
                      
接下來,要提到的是資料庫文件脫離Docker Container 永久保存
建立專用的獨立使用的Volume
$sudo docker volume create --name v_webdb_data
$sudo docker volume ls
$sudo docker volume inspect v_webdb_data
          
清除舊的webdb
$sudo docker stop webdb
$sudo docker container rm webdb
$sudo docker container ls -a
建立新的webdb
$sudo docker run --name webdb -v v_webdb_data:/var/lib/postgresql/data -p 5432:5432 -e POSTGRE_USER=webadmin -e POSTGRE_PASSWORD=demo1234 -d postgres:9.6.16-alpine

如何檢查綁定的volume
$sudo docker inspect webdb
......
"Mounts": [
            {
                "Type": "volume",
                "Name": "v_webdb_data",
                "Source": "/var/lib/docker/volumes/v_webdb_data/_data",
                "Destination": "/var/lib/postgresql/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],
........
        值得注意的是...當未來postgres:9.6.16-alpine更新到postgres:9.6.17-alpine,只要資料庫格式不變的條件下,可直接將其綁定volume,即可完成更新。


七、使用pgadmin4管理PostgreSQL資料庫

觀念:
pgadmin4 Docker image的基本使用(postgre資料庫管理工具)

官網:

Docker Hub
https://hub.docker.com/r/dpage/pgadmin4 (此image非官方認證的image)

實戰演練:
安裝
$sudo docker pull dpage/pgadmin4:4.29
$sudo docker image ls

啟動資料庫
$sudo docker pull postgres:9.6.20-alpine
$sudo docker volume create --name v_webdb_data
$sudo docker run --name webdb -v v_webdb_data:/var/lib/postgresql/data -p 5432:5432 -e POSTGRES_USER=webadmin -e POSTGRES_PASSWORD=demo1234 -d postgres:9.6.20-alpine
啟動pgadmin4
$sudo docker run --name pgadmin4 --rm -p 8080:80 \
      -e 'PGADMIN_DEFAULT_EMAIL=mark2470mark@skjh.chc.edu.tw' \
      -e 'PGADMIN_DEFAULT_PASSWORD=demo1234' \
      -d dpage/pgadmin4:4.29

$sudo docker container ls
此時開啟網頁http://IP:8080,即可看到

停止pgadmin4、 webdb
$sudo docker stop pgadmin4
$sudo docker stop webdb
顯示系統內的container
$sudo docker container ls -a
顯示運行中的container
$sudo docker container ls 

八、建立自己的快取Redis

觀念:
建立自己的快取Redis

官網:
Docker Hub
實戰:
$ sudo docker pull redis:6.0.9-alpine
$ sudo docker image ls

建立永久性的Volume
$ sudo docker volume create --name v_redis_data
$ sudo docker volume ls
$ sudo docker run --name redis1 -v v_redis_data:/data -p 6379:6379 -d redis:6.0.9-alpine redis-server --appendonly yes --requirepass demo1234
$ sudo docker container ls

確認本地打開的TCP port
$ netstat -nltp
$ sudo docker exec -it redis1 top

啟用client 連接redis1
$ sudo apt-get install redis-tools

$ redis-cli -h 127.0.0.1 -p 6379 -a demo1234
127.0.0.1:6379> ping
127.0.0.1:6379> info

127.0.0.1:6379> set data01 "hello, redis."
127.0.0.1:6379> get data01
127.0.0.1:6379> set data02 "mark2470mark"
127.0.0.1:6379> get data02  
127.0.0.1:6379> keys *

127.0.0.1:6379> exit


沒有留言:

張貼留言

只要點兩下,就可以將資料夾input內的所有Word通通轉成一個PDF

系列文章: 1. python 不管何時何地,只要點兩下,資料夾內的所有pdf都會合併成一個pdf https://skjhcreator.blogspot.com/2022/06/pythonpdfpdf.html 2. python 只要點兩下,分別對各資料夾內的pdf合併,...