Docker 筆記

by 11 月 12, 2020開發筆記

測試

參考資料

https://tw.alphacamp.co/blog/docker-introduction http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/

docker run:

docker run -d -p 80:80 nginx (host Port:container Port)
docker run -it -d -p 8080:80 -v ~/Projects/DOCKER_PROJECTS/laravel6:/home/phptest -v ~/phptest:/etc/caddy -v ~/Projects/DOCKER_PROJECTS/mysql:/var/lib/mysql ubuntu_cmp
docker run -it -d -p 8080:80 -v ~/Projects/DOCKER_PROJECTS/laravel6:/home/phptest -v ~/phptest:/etc/caddy uphp4
docker run -it -d -p 8080:80 -v ~/Projects/DOCKER_PROJECTS/laravel6/public:/home/phptest -v ~/phptest:/etc/caddy uphp3 -v 實體路徑:container內的路徑 -d -p 實體port:container的port

開機要跑的指令有:

caddy start /etc/init.d/php7.4-fpm start
cd /etc/caddy && /etc/init.d/php7.4-fpm start && /etc/init.d/mysql start && caddy start 

copy container 內的檔案出來

docker cp <containerID>:/file/path/within/container /host/path/target

mysql 安全性設定

mysql_secure_installation

pdo 問題

FROM php:7.1-fpm

RUN docker-php-ext-install pdo pdo_mysql
docker-php-ext-install mcrypt pdo_mysql mbstring
apt-get install libpng-dev
docker-php-ext-install pdo mbstring gd pdo_mysql
docker-php-ext-enable gd

storage 讀不到資源檔問題

移除public/storage 重新php artisan storage:link 調整權限

進入正在跑的container

docker exec -it <container name> <command> ex:
sudo docker exec -it xdcamp_php_1 /bin/sh

centos 安裝:

更新repo
sudo yum install -y yum-utils

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
安裝:
sudo yum install docker-ce docker-ce-cli containerd.io
啟動:
systemctl start docker
設定開機啟動:
systemctl enable docker
docker-compose
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

docker 在firewall上面的問題 加入信任的相關port,如9000之類的
firewall-cmd --permanent --zone=trusted --change-interface=docker0
firewall-cmd --permanent --zone=trusted --add-port=4243/tcp
firewall-cmd --reload

問題:

安裝時出現如下錯誤

Problem: problem with installed package buildah-1.11.6-7.module_el8.2.0+305+5e198a41.x86_64

yum install --allowerasing docker-ce

在docker內laravel php artisan migrate出現pdo錯誤

需安裝相關的套件
/usr/local/bin/docker-php-ext-install pdo pdo_mysql

啟動 container 時,出現 iptables 找不到 DOCKER chain 的問題

service docker restart

DOCKER 指令

Docker 搜尋 Image docker search image-name docker search debian docker search nginx docker pull ubuntu # 抓所有 ubuntu image 回來, tag 可於後面附加上去 docker pull ubuntu:16.04 # 只抓取 Ubuntu 16.04 的 Image docker pull debian:jessie docker pull debian:latest # library/debian – Docker Hub,latest 只會抓最新版 (Debain Docker 官方版) docker pull ubuntu:latest # library/ubuntu – Docker Hub Docker 啟動 Image 產生 Container (start) docker start hash-id # docker ps -a 看到想要讓他執行,可以直接 start Docker 掛載目錄進入 Container (run -v) docker -v 掛載點 docker run -d –name xxx -p 80:80 -p 3306:3306 -v /mnt/xxx:/mnt debian:jessie /mnt/xxx:目前 Local 環境目錄 /mnt:Container 目錄 Docker 產生、操作 Volumes (volume) docker volume create –name myvol # 建立 local volume docker run -v myvol:/data # Container start 就 Mount 此 volume docker volume rm myvol # 砍掉 volume docker volume ls # 列出 volumes Docker 列出 Container (ps) docker ps # 還在執行中的 Container,可以看到詳細 hash id docker ps -a # 執行、停止的 Container 都列出來 docker ps -l -q # 只列出 hash id,常用,可考慮加入 .bashrc:alias dl=’docker ps -l -q’ Docker 進入(Attach) Container docker attach hash-id # -d 模式後,attach hash id 會回到此 conatiner console,”ctrl-p, ctrl-q detach”. 註:attach 進去此 Container,若沒有用 detach 而是 exit 離開,此 Container 也會跟著離開結束 Docker 刪除 Container (rm) docker rm hash-id # CONTAINER ID docker rm -f hash-id # 強置刪除 docker rm \((docker ps –filter status=exited -q) # 砍掉所有停止的 Container docker rm \)(docker ps -a -q) # 移除所有 Containers docker ps –filter “status=exited” | grep ‘weeks ago’ | awk ‘{print \(1}’ | xargs –no-run-if-empty docker rm # 一次砍掉狀態是 exited,而且是幾週前的 container docker ps -a | awk ‘{print \)1}’ | xargs –no-run-if-empty docker rm # ps -a 砍掉全部 stop 的 container Docker 刪除 Images (rmi) docker rmi image-id # docker images 可以看到 image-id docker rmi -f image-id # 強置刪除 docker rmi \((docker images -q) # 移除所有 docker images docker rmi docker images -qa # 移除所有 docker images docker rmi \)(docker images -f “dangling=true” -q) # 砍所有沒有 tag 的 image Dockfile 產生 Image(build)、由 Container 產生 Image (commit) docker build -t myimage . # build image,需要 Dockerfile docker build -t user-name/v1.0.0 . docker commit hash-id myimage # 由 Container 產生 Image docker commit -m ‘commit-message’ hash-id tsung/myimage:tag-name # 用此 hash-id 現在的內容包成 Image (tsung/myimage),同時設定 Tag tag-name

php my admin

 28
 29   phpmyadmin:
 30     image: phpmyadmin/phpmyadmin
 31     ports:
 32       - 8088:80
 33     environment:
 34       PMA_HOST: db
~

執行指令

要在php容器內執行指令
sudo docker exec -it php-laravel /bin/bash
若要調整php.ini
 cd /usr/local/etc/php
將php.ini-production / php.ini-deve…拷貝一個到conf.d裡面 然後將檔名改成php.ini即可