Docker LNMP搭建報錯 Depends: zlib1g-dev but it is not going to be installed or libz-dev


在使用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

目錄結構:

[root@localhost 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所有進程
[root@node-11 ~]# pkill docker 

2.清空nat表的所有鏈
[root@node-11 ~]# iptables -t nat -F

3.停止docker默認網橋docker0
[root@node-11 ~]# ifconfig docker0 down

4.刪除docker0網橋
[root@node-11 ~]# brctl delbr docker0

5.重啟docker服務
[root@node-11 ~]# systemctl restart docker


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM