在使用Docker 搭建LNMP環境遇到的坑:
following packages have unmet dependencies:
libfreetype6-dev : Depends: zlib1g-dev but it is not going to be installed or libz-dev
libpng12-dev : Depends: zlib1g-dev but it is not going to be installed
嘗試換過各種源都沒能解決這個問題,最後在博文評論中找的解決方案:https://www.awaimai.com/2120.html
更換源中科大的就解決了。
建構PHP的Dockerfile
FROM php:7.1-fpm
COPY zhongkeda.list /etc/apt/sources.list
RUN apt-get update && apt-get install -y vim libfreetype6-dev libjpeg-dev libpng-dev \
&& docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& docker-php-ext-install gd \
&& docker-php-ext-install mysqli \
&& docker-php-ext-install pdo_mysql \
&& rm -r /var/lib/apt/lists/*
中科大源
deb http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian stable main contrib non-free
deb http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/debian stable-proposed-updates main contrib non-free
目錄結構:
[[email protected] Dedecms]# tree -L 2
.
├── docker-compose.yml
├── docker-compose.yml.old
├── mysql
│ ├── config
│ ├── data
│ └── Dockerfile
├── nginx
│ ├── conf
│ └── Dockerfile
├── phpfpm
│ ├── Dockerfile
│ ├── sources1.list
│ ├── sources.list
│ └── zhongkeda.list
├── sources2.list
├── sources.list
├── sources.list.wheezy
└── webcode
├── 123.html
├── DedeCMS5.7
├── DedeCMS-V5.7-UTF8-SP1.tar.gz
├── index.php
└── testdb.php
nginx Dockerfile
FROM nginx:latest
MYSQL Dockerfile
FROM mysql:5.6
docker-compose.yml
mysql:
build: ./mysql
ports:
- "3306:3306"
volumes:
- ./mysql/data/:/var/lib/mysql/
environment:
MYSQL_ROOT_PASSWORD : DEDECMS6655233
phpfpm:
build: ./phpfpm
ports:
- "9000:9000"
volumes:
- ./webcode/:/var/www/html/
links:
- "mysql"
restart: always
nginx:
build: ./nginx
ports:
- "8881:80"
links:
- "phpfpm"
volumes:
- ./webcode/:/var/www/html/
- ./nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
常用指令
鏡像操作
#1. 檢視鏡像
docker images
docker images image_naem
docker images image_id
#2. 删除鏡像 (删除之前需要先删除使用鏡像的容器 ,删除容器見下方)
# 當有多個鏡像ID值一樣的時候可以通過鏡像的名字來删除
docker rmi image_name
docker rmi image_id
#3. 拉取鏡像
docker pull image_name:version # image_name 是要拉取鏡像的名稱 冒号後面跟的是鏡像的版本
docker pull image_name #這種方式拉取的是最新的版本tag: lastest
#4. 查找鏡像
docker search image_name
#搜尋出來有三列結果:
NAME:鏡像倉庫源的名稱
DESCRIPTION:鏡像的描述
OFFICIAL:是否docker官方釋出
#5. 建構鏡像
# 盡量隻用一個RUN,多個指令使用腳本或者 \ 和&& 将指令轉到下一行,保證功能的同時又美觀,例子見上方的PHP Dockerfile
#ADD替換成COPY,ADD會對壓縮包解壓,根據需求自行選擇
docker build -t Dedecms/php:7.1 .
-t :指定建立目标鏡像的名稱
. :表示Dockerfile 所在路徑
#6. 給鏡像打标簽
docker tag image_id web/php:dev
# 7. 使用鏡像建立容器
run -it Dedecms/php:7.1 /bin/bash
如果需要對容器進行更新,請進入容器後使用 apt-get update ,如果更新速度太慢請參見上方的源更換源
-t: 使用僞終端
-i:使用互動式操作
/bin/bash:指定使用的shell
#8. 送出容器副本為新的鏡像
docker commit -m=" 描述資訊" -a="鏡像送出作者" container_id new_image_name
-m:送出的描述資訊
-a:指定鏡像作者
container_id :送出容器的ID
ew_image_name:指定要建立的目标鏡像名
容器操作
#1. 檢視正在運作的容器
docker ps
#檢視所有容器
docker ps -a
#2. 删除容器
#可以一次删除多個,再rm 後面使用空格隔開依次寫上要删除的容器
docker rm container_id
docker rm container_name
#3. 運作容器
docker run -d -P dedecms/php php 123.php
docker run -d -p 8008:80 docker.io/nginx
# 指定IP+PORT
docker run -d -p 127.0.0.1:8008:80 docker.io/nginx
#指定協定 ,預設tcp
docker run -d -p 127.0.0.1:8008:80/udp docker.io/nginx
給容器命名
docker rrun -d -P --name dedecms docker.io/nginx
#測試 curl http://localhost:8008/
将容器内部端口80映射到本機端口8008上
-d:讓容器在背景運作。
-P:将容器内部使用的網絡端口映射到我們使用的主機上。
#4. 檢視容器端口映射情況
docker port container_id
docker port container_name
或者
docker ps
#5. 檢視容器輸出
docker logs -f container_id
#6. 檢視容器内程序
docker top container_name
#7. 檢視容器詳細的配置
docker inspect container_name
#8. 停止容器
docker stop container_id
docker stop container_name
#9. 重新開機容器
docker start container_id
docker start container_name
docker restart container_id
docker restart container_name
#10. 檢視最後一次建立的容器
docker ps -l
#11. 檢視運作日志,用來排查容器運作出錯效果不錯
docker logs container_id
docker logs container_name
docker-compose 指令
- 建構運作項目
docker-compose up -d
docker-compose
-d: 背景啟動模式
- 檢視運作運作的項目
docker-compose ps
- 一次性的運作項目
docker-compose run contianername1 containername2
- 啟動-停止-移除
# 啟動
docker-compose start
docker-compose restart
# 停止
docker-compose stop
# 暫停一個容器
docker-compose pause container_id
# 移除
docker-compose down
#加入參數移除資料卷 --valumes
docker-compose down --valumes
docker-compose rm container_id
注意:docker-compose rm不會删除應用的網絡和資料卷,docker-compose down删除的更徹底
- 檢視容器輸出
docker-compose logs
學習過程中的其他坑
坑1:Couldn't connect to Docker daemon at http://localhost:4243 - is it running?
#查找來的資料,一般都是權限的問題也就是使用sudo可以解決
1. 在使用docker-compose時加上sudo
sudo docker-compose xxx
2. 将目前使用者添加到docker使用者組
sudo usermod -aG docker ${USER}
3. 設定DOCKER_HOST這一個環境變量
export DOCKER_HOST=tcp://localhost:4243
坑2:mysql_1 | chown: cannot read directory '/var/lib/mysql/': Permission denied
#這個關閉selinux即可
1. 臨時關閉
su -c "setenforce 0" # set enforce
2. 永久性關閉
vim /etc/selinux/config
設定
SELINUX=disabled
重新開機電腦reboot ,再次檢視selinux狀态:sestatus
坑3:iptables failed: iptables --wait -t filter -A DOCKER ! -i docker0 -o docker0 -p tcp -d 172.17.0.3 --dport 24224 -j ACCEPT: iptables: No chain/target/match by that name.
1.kill掉docker所有程序
[[email protected] ~]# pkill docker
2.清空nat表的所有鍊
[[email protected] ~]# iptables -t nat -F
3.停止docker預設網橋docker0
[[email protected] ~]# ifconfig docker0 down
4.删除docker0網橋
[[email protected] ~]# brctl delbr docker0
5.重新開機docker服務
[[email protected] ~]# systemctl restart docker
轉載于:https://www.cnblogs.com/ssjt/articles/9584481.html