標籤

bat (54) 作品 (41) python (24) shell (17) windows (11) 虛擬機 (11) php (10) CPP (6) KMS (6) 程式設計 (6) docker (5) 使用教學 (5) xoops (4) 公文 (4) Apache2 (3) Excel (3) juniper (3) 資料庫 (3) 轉檔 (3) mysql (2) 免動手 (2) 資料結構 (2) 軟體廣播 (2) 電腦維修 (2) Android Studio (1) Apple IPAD管理 (1) Arduino (1) CSS (1) LAMP (1) NAS (1) Ubuntu (1) VHD (1) Windows Server (1) 原因 (1) 程式應用 (1) 程式積木 (1) 編輯器 (1) 雲端硬碟 (1)

2021年5月24日 星期一

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

文章分成

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開發環境

九、Docker Compose

觀念:
Docker Compose 的安裝與使用
 
官網:
 
GitHub

實戰:
 
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
 
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo docker-compose --version

解除安裝
$ sudo rm /usr/local/bin/docker-compose
 
開發Python Web 應用(Flask)
建立資料夾work
$ mkdir work

進入資料夾work
$ cd work

建立main.py
$ pico main.py

檔案名稱:main.py
檔案內容:
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
      return 'How are you! Are you OK?'

if __name__ == "__main__":
     app.run(host="0.0.0.0", debug=True, port=5000)

建立requirements.txt
$ pico requirements.txt

檔案名稱:requirements.txt
檔案內容:
flask==1.1.2

建立 Dockerfile
$pico Dockerfile
 
檔案名稱:Dockerfile
檔案內容:
#使用python:3.8-alpine版本
FROM python:3.8.3-alpine3.12
#將當前目錄映射到容器內/app目錄
ADD . /app
#設置/app為工作目錄
WORKDIR /app
#安裝python 需求包
RUN pip install -r requirements.txt
#啟動flask
CMD python main.py

建立flask image
$sudo docker build -t mark2470mark/myweb:0.1 
$sudo docker image ls
$sudo docker container run --name myweb -d -p 8088:5000 mark2470mark/myweb:0.1

$sudo docker container ls

$curl http://127.0.0.1:8088
打開瀏覽器,並在網址輸入  http://127.0.0.1:8088
 
刪除所有不用的容器
$sudo docker container prune
 $sudo docker container ls
停止容器
 $sudo docker container stop myweb
$sudo docker container prune
整個過程如下:

 接下來要談到 docker-compose.yml
 
文件版本: https://docs.docker.com/compose/compose-file/
現在使用的版本為 3.8
 
建立 docker-compose.yml
$pico docker-compose.yml
 
檔案名稱:docker-compose.yml
檔案內容:
version: '3.8'
services:
   myweb:
       build: .
       ports:
       - "8088:5000"
       volumes:
       - .:/app
 
容器啟動
$sudo docker-compose up
容器重新編譯後啟動
$sudo docker-compose up --build
容器重新編譯後啟動
$sudo docker-compose up -d --build
 
查詢容器狀態
$sudo docker-compose ps
 
執行myweb容器內的命令
$sudo docker-compose run myweb top

查看容器輸出日誌
(1)使用docker-compose
$sudo docker-compose logs -f myweb
 
(2)使用docker
$sudo docker logs -f work_myweb_1
 
容器停止
$sudo docker-compose stop


容器停止+消除(容器+網路)
$sudo docker-compose down
 
 容器停止+消除(容器+網路+image)
$sudo docker-compose down --rmi all 

 

 十、Flask+Redis多服務開發部署

觀念:
Docker Compose多服務開發部署(flask+Redis)
 
服務接構設計:
client<----> web(flask:myweb<---->db(redis:myredis)
 
實戰:
 
0.建立工作目錄並進入工作目錄
$mkdir work10
$cd work10

1.建立main.py
$pico  main.py
 
檔案名稱:main.py
檔案內容:
from flask import Flask
from redis import Redis
 
app=Flask(__name__)
redis=Redis(host='myredis',port=6379)
 
@app.route('/')
def hello():
      redis.incr('hits')
      return 'How are you!! We have met %s times. ' % redis.get('hits')
 
if __name__=="__main__":
     app.run(host="0.0.0.0", debug=True, port=5000)
 
2.建立 requirements.txt
$pico  requirements.txt
 
檔案名稱:requirements.txt
檔案內容:
flask==1.1.2
redis==3.5.3
 
3.建立Dockerfile
$pico Dockerfile
 
檔案名稱:Dockerfile
檔案內容:
#使用python:3.8-alpine版本
FROM python:3.8.3-alpine3.12
#將當前目錄映射到容器內/app目錄
ADD . /app
#設置/app為工作目錄
WORKDIR /app
#安裝python 需求包
RUN pip install -r requirements.txt
#啟動flask
CMD python main.py
 
4.建立docker-compose.yml
$pico docker-compose.yml
 
檔案名稱:docker-compose.yml
檔案內容:
version: '3.8'
services:
   myweb:
       build: .
       ports:
       - "8088:5000"
       volumes:
       - .:/app
       depends_on:
       - myredis
   myredis:
       image: redis:6.0.5-alpine 

5.容器重新編譯後啟動
容器啟動
$sudo docker-compose up
容器重新編譯後啟動
$sudo docker-compose up --build
容器重新編譯後啟動
$sudo docker-compose up -d --build
檢查image
$sudo docker image ls
查詢容器狀態
$sudo docker-compose ps

確認localhost打開的port
$netstat -nltp

測試web
$curl http://127.0.0.1:8088
 執行myweb容器內命令
$sudo docker-compose run myweb top

查看容器輸出日誌
(1)使用docker-compose
$sudo docker-compose logs -f myweb

(2)使用docker
$sudo docker logs -f work10_myweb_1
 
容器停止
$sudo docker-compose stop
容器停止+消除(容器+網路)
$sudo docker-compose down
容器停止+消除(容器+網路+image)
$sudo docker-compose down --rmi all

十一、建立Vue開發環境

 觀念:
1.Docker Node.js image的使用
2.安裝Vue Cli4等工具包
 
官網:
 
實戰:
0.建立工作目錄並進入工作目錄
$mkdir work11
$cd work11
 
1.取得Ubuntu image
$sudo docker pull node:12.20.1-buster
$sudo docker image ls

$mkdir src

2.建立Dockerfile
$pico Dockerfile
 
檔案名稱:Dockerfile
檔案內容:
FROM node:12.20.1-buster
ADD ./src /app
WORKDIR /app
ENV DEBCONF_NOWARNINGS yes
RUN apt-get update -y && \
         apt-get upgrade -y && \
         apt-get install -y \
                     build-essential -y \
                     curl \
                     nmap \
                     git \
                     nano \
         && rm -rf /var/lib/apt/lists/*
RUN npm install -g @vue/cli
 
3.建立image並啟動container
$sudo docker image build -t mark2470mark/vuecli4:0.1 .
$sudo docker image ls
$sudo docker container run -it -d mark2470mark/vuecli4:0.1 --name vuecli4 -v `pwd` /src:/app -p 8080:8080 
$sudo docker container ls
$sudo docker exec -it vuecli4 /bin/bash       



資料來源:

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


只要點兩下,就能夠將InputAndOutput資料夾底下的子子孫孫資料夾內所有Word通通轉成PDF

  系列文章: 1. 只要點兩下,就能將一堆的Doc與Docx 轉成 PDF 1. https://skjhcreator.blogspot.com/2023/05/docdocx-pdf.html 2. 只要點兩下,就能將一堆的JPG轉成一個PDF,並以JPG所在的資料夾名稱為...