2021年5月24日 星期一

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

文章分成

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

一、shell快速完成安裝docker

Docker定義:
應用程式運行環境
開發工具:
Visual Studio Code
Docker版本:
Docker Engine - Community
Docker安裝
Docker Engine - Community for Ubuntu 18.04(LTS)
指令
#系統更新
$sudo apt update
#安裝系統套件包  
$sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent
$sudo apt-get install software-properties-common
或是
$sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
#加入Docker套件庫密鑰
$curl -fsSL https://download.docker.com/linux/ubuntu/gpg|sudo apt-key add -
9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
#密鑰確認
$apt-key list
#最後8位作為fingerprint參數
$sudo apt-key fingerprint 0EBFCD88
#將Docker套件庫加入本地端套件庫
$sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
#檢查ubuntu核心版本 同 檢查套件庫加入的位置與內容

$lsb_release -cs
#檢查套件庫加入的位置與內容
$cat /etc/apt/sources.list|grep docker
#系統更新
$sudo apt update
#取得apt內docker-ce的內容
$sudo apt show docker-ce
#安裝Docker-ce
$sudo apt-get install docker-ce docker-ce-cli containerd.io
#檢驗安裝
$docker help
$docker version
$sudo docker run hellp-world
#檢查docker狀態
$service docker status
#將自己的使用者帳號webadmin加入至 docker 群組:
$sudo usermod -aG docker webadmin
登出再重新登入之後,就可以開始使用 Docker 了

將上述指令寫成shell,快速完成安裝

檔名:DockerInstall.sh
#!/bin/bash
apt update
apt-get install apt-transport-https ca-certificates curl gnupg-agent
apt-get install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg|sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
apt update
apt-get install docker-ce docker-ce-cli containerd.io
usermod -aG docker webadmin

二、建立一個Docker版的Node.js程式,並完成部署與分享

觀念:

1建立Docker Image
2.編寫程式
3.上傳到GitHub
4.DockerHub雲編譯打包
5.下載使用Docker Image

目標:

建立一個Docker版的Node.js程式,並完成部署與分享

實戰:

電腦一

1.建立Git->https://github.com/mark2470mark

2.將Git下載到本地端
$git clone https://github.com/mark2470mark/mynode
$cd mynode

3.取得Node.js 8.16.1 LTS的鏡像
$sudo docker image pull node:8.16.1
$sudo docker image ls

4.編寫Node.js程式
$pico hello.js
內容為
console.log("Hello World!!");

5.執行此程式,需先建立一個Node.js的執行環境(container/容器)
$pico Dockerfile
內容為
FROM node:8.16.1
RUN mkdir /src
COPY hello.js /src
CMD ["node","/src/hello.js"]

6.編譯打包我們的執行環境
$sudo docker image build -t mark2470mark/mynode:v01 .
$sudo docker image ls

7.在目前環境中執行我們的程式
$sudo docker container run mark2470mark/mynode:v01

8.Git 提交
$git add .
$git commit -m "mynode1"
$git push
$git tag v01
$git tag
$git push origin v01

9.Docker Hub 雲編譯->https://hub.docker.com/

電腦二

1.取得執行環境,執行應用
$sudo docker image pull mark2470/mynode:latest
$sudo docker container run mark2470/mynode:latest
$sudo docker image pull mark2470/mynode:v01
$sudo docker container run mark2470/mynode:v01


三、利用ENTRYPOINT進行指定的程序

觀念:

ENTRYPOINT
ENTRYPOINT 具CMD功能,且可以跟CMD合用。
例如:
ENTRYPOINT ["curl"]
CMD ["http://www.skjh.chc.edu.tw/"]

container 啟動時會執行 curl http://www.skjh.chc.edu.tw/

實戰:

1.取得最新版的node.js鏡像
$sudo docker image pull node:latest

$sudo docker pull node:latest
2.啟動container,執行container內命令
$sudo docker container run node:latest ls /etc/
$sudo docker container run node:latest cat /etc/hosts
$sudo docker container run node:latest cat /etc/os-release
3.執行node進程,顯示版本號
$sudo docker image ls
$sudo docker container run node:latest node -v
$sudo docker container run node:latest node -help
4.設置node為預設的程序,然後顯示版本號
$pico Dockerfile
其內容為
FROM node:latest
ENTRYPOINT ["node"]
CMD [""]

$sudo docker image build -t mynode:latest .

$sudo docker image ls
$sudo docker container run mynode:latest -v
等同步驟3.$sudo docker container run node:latest node -v
$sudo docker container run mynode:latest -help
等同步驟3.$sudo docker container run node:latest node -help
5.使用CMD命令指定程序的預設參數
$pico Dockerfile
其內容為
FROM node:latest
ENTRYPOINT ["node"]
CMD ["-v"]

$sudo docker image build -t mynode:latest .
$sudo docker container run -it mynode:latest
等同步驟4.$sudo docker container run mynode:latest -v
等同步驟3.$sudo docker container run node:latest node -v
$sudo docker container run -it mynode:latest -help
等同步驟4.$sudo docker container run mynode:latest -help
等同步驟3.$sudo docker container run node:latest node -help
這意思是若指定參數-help,則原先的參數-v,則會被覆蓋。
$sudo docker container run -it mynode:latest -e "console.log('hello')"
-e 執行js腳本


四、建立一個Nginx的Web服務器

觀念:

1.在Docker Hub找可用的Image
2.Image的使用方法

實戰:

1.找到需要的Image,並下載到本地端
(1)到 Nginx.org,查閱目前最新版
(2)到Docker Hub,查詢Nginx

image版本說明:
image中alpine的意思是?
答:alpine 等於最小化系统,功能相同。
$sudo docker pull nginx:1.19.0-alpine
$sudo docker image ls



2.列出container內目錄
$sudo docker container run nginx:1.19.0-alpine ls

3.確認container 核心版本
$sudo docker container run nginx:1.19.0-alpine cat /etc/os-release

4.列出/etc/nginx目錄下的檔案或目錄
$sudo docker container run nginx:1.19.0-alpine ls -R -l /etc/nginx
ㄎㄧ

5. 列出nginx 全域設定檔案nginx.conf
$sudo docker container run nginx:1.19.0-alpine cat /etc/nginx/nginx.conf

6.列出Web虛擬主機的預設文件default.conf
$sudo docker container run nginx:1.19.0-alpine cat /etc/nginx/conf.d/default.conf

7.確認虛擬目錄下的內容
$sudo docker container run nginx:1.19.0-alpine ls -R -l /usr/share/nginx/html

8.啟動容器,確認效果
$sudo docker container run --name myweb -d -p 8088:80 nginx:1.19.0-alpine
$sudo docker container ls

9.服務動作確認
$curl http://127.0.0.1:8088

10.停止容器服務
$sudo docker container stop myweb
(1)停止所有容器與刪除所有容器
$sudo docker stop $(docker ps -a -q)  && sudo docker rm  $(docker ps -a -q) 
11.啟動現有的container
$sudo docker container start myweb
12.列出所有container
$sudo docker container ls -a
13.刪除指定的container
$sudo docker container rm -f myweb
14.刪除所有的容器
$sudo docker container prune
15.如何在本地端建立自己的網頁目錄與相關的html
$mkdir myweb
$cd myweb
$pico index.html
其內容為
<html>
<head>
<title></title>
</head>
<body>
<h1>Nginx Container index.html</h1>
</body>
</html>
$sudo docker container run --name myweb -d -p 8088:80 -v /home/webadmin/myweb:/usr/share/nginx/html:ro nginx:1.19.0-alpine
$curl http://127.0.0.1:8088

將上述指令寫成shell,快速完成安裝

檔案名稱:DockerNginxInstall.sh
檔案內容:
#!/bin/bash
docker container prune
docker pull nginx:1.19.0-alpine
mkdir myweb
cd myweb
echo "<html>" >index.html
echo "<head>" >>index.html
ec

一、shell快速完成安裝docker

Docker定義:
應用程式運行環境
開發工具:
Visual Studio Code
Docker版本:
Docker Engine - Community
Docker安裝
Docker Engine - Community for Ubuntu 18.04(LTS)
指令
#系統更新
$sudo apt update
#安裝系統套件包  
$sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent
$sudo apt-get install software-properties-common
或是
$sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
#加入Docker套件庫密鑰
$curl -fsSL https://download.docker.com/linux/ubuntu/gpg|sudo apt-key add -
9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
#密鑰確認
$apt-key list
#最後8位作為fingerprint參數
$sudo apt-key fingerprint 0EBFCD88
#將Docker套件庫加入本地端套件庫
$sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
#檢查ubuntu核心版本 同 檢查套件庫加入的位置與內容

$lsb_release -cs
#檢查套件庫加入的位置與內容
$cat /etc/apt/sources.list|grep docker
#系統更新
$sudo apt update
#取得apt內docker-ce的內容
$sudo apt show docker-ce
#安裝Docker-ce
$sudo apt-get install docker-ce docker-ce-cli containerd.io
#檢驗安裝
$docker help
$docker version
$sudo docker run hellp-world
#檢查docker狀態
$service docker status
#將自己的使用者帳號webadmin加入至 docker 群組:
$sudo usermod -aG docker webadmin
登出再重新登入之後,就可以開始使用 Docker 了

將上述指令寫成shell,快速完成安裝

檔名:DockerInstall.sh
#!/bin/bash
apt update
apt-get install apt-transport-https ca-certificates curl gnupg-agent
apt-get install software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg|sudo apt-key add -
apt-key fingerprint 0EBFCD88
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
apt update
apt-get install docker-ce docker-ce-cli containerd.io
usermod -aG docker webadmin

二、建立一個Docker版的Node.js程式,並完成部署與分享

觀念:

1建立Docker Image
2.編寫程式
3.上傳到GitHub
4.DockerHub雲編譯打包
5.下載使用Docker Image

目標:

建立一個Docker版的Node.js程式,並完成部署與分享

實戰:

電腦一

1.建立Git->https://github.com/mark2470mark

2.將Git下載到本地端
$git clone https://github.com/mark2470mark/mynode
$cd mynode

3.取得Node.js 8.16.1 LTS的鏡像
$sudo docker image pull node:8.16.1
$sudo docker image ls

4.編寫Node.js程式
$pico hello.js
內容為
console.log("Hello World!!");

5.執行此程式,需先建立一個Node.js的執行環境(container/容器)
$pico Dockerfile
內容為
FROM node:8.16.1
RUN mkdir /src
COPY hello.js /src
CMD ["node","/src/hello.js"]

6.編譯打包我們的執行環境
$sudo docker image build -t mark2470mark/mynode:v01 .
$sudo docker image ls

7.在目前環境中執行我們的程式
$sudo docker container run mark2470mark/mynode:v01

8.Git 提交
$git add .
$git commit -m "mynode1"
$git push
$git tag v01
$git tag
$git push origin v01

9.Docker Hub 雲編譯->https://hub.docker.com/

電腦二

1.取得執行環境,執行應用
$sudo docker image pull mark2470/mynode:latest
$sudo docker container run mark2470/mynode:latest
$sudo docker image pull mark2470/mynode:v01
$sudo docker container run mark2470/mynode:v01


三、利用ENTRYPOINT進行指定的程序

觀念:

ENTRYPOINT
ENTRYPOINT 具CMD功能,且可以跟CMD合用。
例如:
ENTRYPOINT ["curl"]
CMD ["http://www.skjh.chc.edu.tw/"]

container 啟動時會執行 curl http://www.skjh.chc.edu.tw/

實戰:

1.取得最新版的node.js鏡像
$sudo docker image pull node:latest

$sudo docker pull node:latest
2.啟動container,執行container內命令
$sudo docker container run node:latest ls /etc/
$sudo docker container run node:latest cat /etc/hosts
$sudo docker container run node:latest cat /etc/os-release
3.執行node進程,顯示版本號
$sudo docker image ls
$sudo docker container run node:latest node -v
$sudo docker container run node:latest node -help
4.設置node為預設的程序,然後顯示版本號
$pico Dockerfile
其內容為
FROM node:latest
ENTRYPOINT ["node"]
CMD [""]

$sudo docker image build -t mynode:latest .

$sudo docker image ls
$sudo docker container run mynode:latest -v
等同步驟3.$sudo docker container run node:latest node -v
$sudo docker container run mynode:latest -help
等同步驟3.$sudo docker container run node:latest node -help
5.使用CMD命令指定程序的預設參數
$pico Dockerfile
其內容為
FROM node:latest
ENTRYPOINT ["node"]
CMD ["-v"]

$sudo docker image build -t mynode:latest .
$sudo docker container run -it mynode:latest
等同步驟4.$sudo docker container run mynode:latest -v
等同步驟3.$sudo docker container run node:latest node -v
$sudo docker container run -it mynode:latest -help
等同步驟4.$sudo docker container run mynode:latest -help
等同步驟3.$sudo docker container run node:latest node -help
這意思是若指定參數-help,則原先的參數-v,則會被覆蓋。
$sudo docker container run -it mynode:latest -e "console.log('hello')"
-e 執行js腳本


四、建立一個Nginx的Web服務器

觀念:

1.在Docker Hub找可用的Image
2.Image的使用方法

實戰:

1.找到需要的Image,並下載到本地端
(1)到 Nginx.org,查閱目前最新版
(2)到Docker Hub,查詢Nginx

image版本說明:
image中alpine的意思是?
答:alpine 等於最小化系统,功能相同。
$sudo docker pull nginx:1.19.0-alpine
$sudo docker image ls



2.列出container內目錄
$sudo docker container run nginx:1.19.0-alpine ls

3.確認container 核心版本
$sudo docker container run nginx:1.19.0-alpine cat /etc/os-release

4.列出/etc/nginx目錄下的檔案或目錄
$sudo docker container run nginx:1.19.0-alpine ls -R -l /etc/nginx
ㄎㄧ

5. 列出nginx 全域設定檔案nginx.conf
$sudo docker container run nginx:1.19.0-alpine cat /etc/nginx/nginx.conf

6.列出Web虛擬主機的預設文件default.conf
$sudo docker container run nginx:1.19.0-alpine cat /etc/nginx/conf.d/default.conf

7.確認虛擬目錄下的內容
$sudo docker container run nginx:1.19.0-alpine ls -R -l /usr/share/nginx/html

8.啟動容器,確認效果
$sudo docker container run --name myweb -d -p 8088:80 nginx:1.19.0-alpine
$sudo docker container ls

9.服務動作確認
$curl http://127.0.0.1:8088

10.停止容器服務
$sudo docker container stop myweb
(1)停止所有容器與刪除所有容器
$sudo docker stop $(docker ps -a -q)  && sudo docker rm  $(docker ps -a -q) 
11.啟動現有的container
$sudo docker container start myweb
12.列出所有container
$sudo docker container ls -a
13.刪除指定的container
$sudo docker container rm -f myweb
14.刪除所有的容器
$sudo docker container prune
15.如何在本地端建立自己的網頁目錄與相關的html
$mkdir myweb
$cd myweb
$pico index.html
其內容為
<html>
<head>
<title></title>
</head>
<body>
<h1>Nginx Container index.html</h1>
</body>
</html>
$sudo docker container run --name myweb -d -p 8088:80 -v /home/webadmin/myweb:/usr/share/nginx/html:ro nginx:1.19.0-alpine
$curl http://127.0.0.1:8088

將上述指令寫成shell,快速完成安裝

檔案名稱:DockerNginxInstall.sh
檔案內容:
#!/bin/bash
docker container prune
docker pull nginx:1.19.0-alpine
mkdir myweb
cd myweb
echo "<html>" >index.html
echo "<head>" >>index.html
echo "<title>myweb</title>" >>index.html
echo "</head>" >>index.html
echo "<body>" >>index.html
echo "<h1>Nginx Container index.html</h1>" >>index.html
echo "</body>" >>index.html
echo "</html>" >>index.html
docker container run --name myweb -d -p 8088:80 -v /home/webadmin/myweb:/usr/share/nginx/html:ro nginx:1.19.0-alpine
curl http://127.0.0.1:8088

ho "<title>myweb</title>" >>index.html
echo "</head>" >>index.html
echo "<body>" >>index.html
echo "<h1>Nginx Container index.html</h1>" >>index.html
echo "</body>" >>index.html
echo "</html>" >>index.html
docker container run --name myweb -d -p 8088:80 -v /home/webadmin/myweb:/usr/share/nginx/html:ro nginx:1.19.0-alpine
curl http://127.0.0.1:8088

沒有留言:

張貼留言

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

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