# docker 網站開發-環境建立 ## 安裝Docker-desktop 先去官網上下載 https://www.docker.com/products/docker-desktop/ ![](https://i.imgur.com/XtCE7SF.png) 一定要使用**系統管理員**身分開啟 ![](https://i.imgur.com/hKiqtha.png) 接下來按照步驟裝完,WSL2也要安裝 ### 在WSL環境直接安裝Docker(不透過Desktop) 先安裝WSL https://learn.microsoft.com/zh-tw/windows/wsl/install ``` wsl --install wsl --list --online # 查詢安裝清單 wsl --install -d Ubuntu # 選擇Ubuntu安裝 ``` 檢查一下版本 ``` wsl -l -v ``` 安裝docker `sudo curl -sSL https://get.docker.io/ | sh` ### 設定權限 ``` sudo groupadd docker sudo usermod -aG docker $USER newgrp docker ``` ## 建立橋接器IP 建立網域 `docker network create --subnet=172.18.0.0/16 Aslent` 查詢網域 `docker network ls` ![](https://i.imgur.com/vuYPKCM.png) ## 安裝Portainer(Docker管理工具) 直接從docker下載 ```shell= sudo docker volume create portainer_data sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest ``` 進入網頁(一定要https) https://192.168.1.103:9443/ 建好管理者帳密後(Admin),即可到主畫面 ![](https://i.imgur.com/otjW0eW.png) 進入Container List,一開始只有portainer,其餘4個是後面建出來的 ![](https://i.imgur.com/zR8Jb26.png) 同樣的下指令也可察看當前Container List ![](https://i.imgur.com/z2v0Y0g.png) ## 安裝Jenkins(專案部屬管理工具) 特別需要注意-v的參數設定,這會關係到Jenkins可否使用到docker的資源 ```shell= docker pull jenkins/jenkins:lts-jdk11 docker run --name jenkins -u root -d --restart always -p 8080:8080 -p 50000:50000 -v C:\Users\MyUser\jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts ``` 資料備份位置 * C:\Users\MyUser\jenkins_home 進入網頁 https://192.168.1.103:8080/ 一開始會要求輸入密碼驗證,到C:\Users\MyUser\jenkins_home\secrets找一下 選擇建議的設定 等候jenkins完成plugin安裝 跳轉至主畫面 ![](https://i.imgur.com/iOwn4Uz.png) ### jenkins內安裝docker 後續的作業需要用到docker指令 點此進入jenkins console ![](https://i.imgur.com/SQrLUkV.png) 執行以下指令 ```shell= docker exec -it jenkins_container_id bash apt-get update && apt-get install -y docker.io ``` ### Jenkins使用docker的權限開啟 一般的作法 `usermod -aG docker jenkins` 直接修改,但每次重啟需重新調整 `chmod 777 /var/run/docker.sock` `chown $USER /var/run/docker.sock` https://stackoverflow.com/questions/48568172/docker-sock-permission-denied https://askubuntu.com/questions/477551/how-can-i-use-docker-without-sudo ### 新增作業 ![](https://i.imgur.com/AwBpnWz.png) 輸入git網址與金鑰 ![](https://i.imgur.com/ULFuqQx.png) 填入主分支的名稱 ![](https://i.imgur.com/Qii1C4B.png) 設定建置步驟 ![](https://i.imgur.com/pL7vLYO.png) shell: ```bash= #!/bin/bash VERSION=`cat version` IMAGE="axxxxx/axxxxx_image:$VERSION" echo "IMAGE NAME : $IMAGE" docker build -t $IMAGE . --no-cache docker run -d --name axxxxx_container \ --net axxxxx --ip 172.18.0.3 --restart always \ --label io.portainer.accesscontrol.public \ # 設定為protainer公開 -e FLASK_APP=main.py -e FLASK_ENV=production -e TZ=Asia/Taipei \ -e SQL_ACCOUNT=root -e SQL_PASSWORD=henry123\ -p 9000:9000 $IMAGE ``` ### 執行作業 執行之前先將原有的container刪除,以便後續可順利建立新的container 執行作業 ![](https://i.imgur.com/0L6Z56f.png) 接下來等他跑完建置流程,綠色打勾才算成功 ![](https://i.imgur.com/xzKQ7YQ.png) 失敗的話可以看裡面的錯誤訊息 ![](https://i.imgur.com/Mk0eVHr.png) 成功之後去Portainer看看是否有正常運作 ## mariadb 下載之前,先製作config檔(conf.d/xxxx.cnf) 這邊要注意權限問題,.cnf只能有r權限,外層資料夾(conf.d)需具有rx權限 ``` [mysqld] innodb_buffer_pool_size = 2G innodb_buffer_pool_chunk_size=64M #innodb_buffer_pool_instances=8 general_log_file='/var/log/mysql/general.log'; log_slow_queries=/var/log/mysql/slow.log log_error='/var/log/mysql/error.log'; [mariadb] #default_time_zone = 'Asia/Taipei' ``` 從docker下載並且run ```shell= docker run -d -p 13306:3306 --name some_mariadb C:\Users\User\some_mariadb:/var/lib/mysql -p 13306:3306 --env MARIADB_USER=henry --env MARIADB_PASSWORD=henry123 --env MARIADB_ROOT_PASSWORD=henry123 --env TZ=Asia/Taipei mariadb:latest ``` 使用bat `C:\Users\MyUser>command\mariadb.bat` 設定檔的位置 * C:\Users\MyUser\some_mariadb\mariadb_config 資料表的位置 * C:\Users\MyUser\some_mariadb\mariadb 檢查設定檔設定是否有套用 ![](https://i.imgur.com/8PKAvmQ.png)