首頁>技術>

教女朋友web開發,第1節:Docker搭建Codeigniter的開發環境

目錄:

如果你也開啟這個地址,你會發現,Intl左右有兩個*,其實這漢化過來的時候沒有做好。需要7.2或更新版本的 PHP :我們PHP就選擇php:7.4.8-apache的Docker映象好了

1. 選擇Docker映象

我們的Dockerfiel檔案裡面新增第1部分:

# https://hub.docker.com/_/php 在這個地方可以看到官方的php映象,選擇自己需要的。FROM php:7.4.8-apache

這個版本的映象是基於debian:buster-slim, 我們安裝軟體的時候就可以按debian作業系統的方式來:

2.軟體源-配置國內映象

我們如果在映象php:7.4.8-apache這個基礎上直接安裝相應的軟體,那麼由於國內的網路問題你會發現,速度真的不是一般的慢。好在國內也有不少這方面的映象可以使用。Debian 的軟體源配置檔案是 /etc/apt/sources.list。如果我們run這個映象,我們可以看到sources.list它的內容是這樣:

# cat sources.list.back.2021.01.19# deb http://snapshot.debian.org/archive/debian/20200720T000000Z buster maindeb http://deb.debian.org/debian buster main# deb http://snapshot.debian.org/archive/debian-security/20200720T000000Z buster/updates maindeb http://security.debian.org/debian-security buster/updates main# deb http://snapshot.debian.org/archive/debian/20200720T000000Z buster-updates maindeb http://deb.debian.org/debian buster-updates main

可以看到buster字眼,將系統自帶的該檔案做個備份(先把舊的檔案備份好這是一個很好的習慣):

mv /etc/apt/sources.list /etc/apt/sources.list.back.2021.01.19

軟體源配置檔案,要配置映象的設定可以從下面這個網站找到:

https://mirrors.tuna.tsinghua.edu.cn/help/debian/

我們的Dockerfiel檔案裡面新增第2部分:

#第2部分 apt update 加速RUN echo '# 預設註釋了原始碼映象以提高 apt update 速度,如有需要可自行取消註釋' > /etc/apt/sources.list && \echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free' >> /etc/apt/sources.list && \echo '# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free' >> /etc/apt/sources.list && \echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free' >> /etc/apt/sources.list && \echo '# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free' >> /etc/apt/sources.list && \echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free' >> /etc/apt/sources.list && \echo '# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free' >> /etc/apt/sources.list && \echo 'deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free' >> /etc/apt/sources.list && \echo '# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free' >> /etc/apt/sources.list && \

這裡的第1行的是隻有一個>為建立,其他行是>> 為追加, 最後一行的話尾部是&& \,因為後面還有沒寫完的, 一個RUN語句儘可能多的寫一些,這也是Docker的最佳策略之一。

3.安裝常用軟體

可以多看看別人寫的Dockerfile,借鑑一下別人的思路和各種寫法。我們在php官方的Dockerfile可以看到這樣一部分:

RUN set -eux; \    apt-get update; \    apt-get install -y --no-install-recommends \        $PHPIZE_DEPS \        ca-certificates \        curl \        xz-utils \    ; \    rm -rf /var/lib/apt/lists/*

這裡,set -eux; 有三個意思:

e 若指令傳回值不等於0,則立即退出shell。  u 當執行時使用到未定義過的變數,則顯示錯誤資訊。x 執行指令後,會先顯示該指令及所下的引數。
以上這三點參考自:https://www.cnblogs.com/robinunix/p/11635560.html

其中& 、; 、&& 的區別的例子:

command1 & command2 & command3     三個命令同時執行 command1; command2; command3          不管前面命令執行成功沒有,後面的命令繼續執行 command1 && command2                         只有前面命令執行成功,後面命令才繼續執行

我們的Dockerfiel檔案裡面新增第3部分:

#第3部分,安裝 vim mlocate unzip wgetset -eux; \    apt-get update && \    apt-get install -y --no-install-recommends \        vim \        mlocate \        unzip \        tree \                wget && \    rm -rf /var/lib/apt/lists/* && \  apt-get clean
4. 安裝intl:

我們的Dockerfiel檔案裡面新增第4部分,安裝intl:

#第4部分 安裝intl:RUN apt-get update && \apt-get install -y --no-install-recommends libicu-dev && \rm -r /var/lib/apt/lists/* && \docker-php-ext-install -j$(nproc) intl && \docker-php-ext-install mysqli

在phpinf()裡可以看到:

5.安裝libcurl

我們的Dockerfiel檔案裡面新增第5部分,安裝libcurl:

第5部分,安裝libcurl:RUN apt-get update && \apt-get install -y --no-install-recommends libcurl4-openssl-dev && \rm -r /var/lib/apt/lists/*
6. 選擇Codeigniter版本

我們就選擇4.04版本好了。它的下載地址在:

https://github.com/codeigniter4/framework/archive/v4.0.4.zip

將這個檔案下載到我們的映象裡(Dockerfiel檔案裡):我們的Dockerfiel檔案裡面新增第6部分:

# 第6部分:RUN mkdir /virhuiai/ && cd /virhuiai && wget https://github.com/codeigniter4/framework/archive/v4.0.4.zip && unzip v4.0.4.zip

解壓後在目錄/virhuiai/framework-4.0.4下

7. 配置php

查詢 php.ini 的位置法一:locate命令

# updatedb# locate php.ini/usr/local/etc/php/php.ini-development/usr/local/etc/php/php.ini-production

法二:在php的Dockerfile中能看到php.ini的位置

https://hub.docker.com/layers/php/library/php/7.4-apache/images/sha256-a04de56c0cd08d5372c07cedf8fdf0b609b61e947750c72589ff95fb10099948?context=exploreENV PHP_INI_DIR=/usr/local/etc/php

複製生成開發環境的php.ini, 我們的Dockerfiel檔案裡面新增第7部分:

# 第7部分RUN cp /usr/local/etc/php/php.ini-development /usr/local/etc/php/php.ini && \

先看下舊資料:

vim /usr/local/etc/php/php.ini

啟用拓展,我們的Dockerfiel檔案裡面新增第8部分:

# 第7.2部分sed -ri -e 's!;extension=intl!extension=intl!g' /usr/local/etc/php/php.ini && \sed -ri -e 's!;extension=mysqli!extension=mysqli!g' /usr/local/etc/php/php.ini && \sed -ri -e 's!;extension=mbstring!extension=mbstring!g' /usr/local/etc/php/php.ini && \sed -ri -e 's!;extension=mbstring!extension=mbstring!g' /usr/local/etc/php/php.ini && \sed -ri -e 's!;extension=pdo_sqlite!extension=pdo_sqlite!g' /usr/local/etc/php/php.ini \
8.設定apache目錄

我們的Dockerfiel檔案裡面新增第8部分:

# 第8部分#ENV APACHE_DOCUMENT_ROOT '/virhuiai/framework-4.0.4/public'RUN sed -ri -e 's!/var/www/html!/virhuiai/framework-4.0.4/public!g' /etc/apache2/sites-available/*.conf && \sed -ri -e 's!/var/www/!/virhuiai/framework-4.0.4/public!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.confWORKDIR /virhuiai/framework-4.0.4/public
# 第9部分# 映象資訊LABEL Author="virhuiai"LABEL Version="0.0.2"LABEL Description="PHP APACHE CODEIGNITER 映象"
9.映象測試
cd /Users/virhuiaivirhuiai/Documents/virhuiai-github/teaching_gf_web_developdocker build . -t tmpimgdocker run -d -p 80:80 --rm --name tmpimg_c tmpimg

啟動,在宿主機上就可以使用了,這會目前因為未配置資料庫,會報錯

進入終端

docker exec -it tmpimg_c /bin/sh
10 複製檔案到宿主機
docker cp tmpimg_c:/virhuiai/framework-4.0.4/ /Users/virhuiaivirhuiai/Documents/virhuiai-github/teaching_gf_web_develop

後面執行時就可以從外面對映到裡面了。

發現Docker Hub上的配置需要修改下:

提交到Docker Hub,生成:

virhuiai/teaching_gf_web_develop:v-0.0.2
11 連線資料庫

暫時用 --link的方式做示例:

docker run -e MYSQL_DATABASE=ci4_database_name -e MYSQL_ROOT_PASSWORD=Passw0rd! -p 3306:3306 --name ci4mysql57 -d mysql:5.7
docker container run --publish 80:80 -v /Users/virhuiaivirhuiai/Documents/ci-framework-4.0.3:/ci4/ --name ci4 --link ci4mysql57:mysql_db -d virhuiai/teaching_gf_web_develop:v-0.0.2
12 資料庫配置

app/Config/Database.php

    public $default = [        'DSN'      => '',        'hostname' => 'mysql_db',        'username' => 'root',        'password' => 'Passw0rd!',        'database' => 'ci4_database_name',        'DBDriver' => 'MySQLi',        'DBPrefix' => '',        'pConnect' => false,        'DBDebug'  => (ENVIRONMENT !== 'production'),        'cacheOn'  => false,        'cacheDir' => '',        'charset'  => 'utf8',        'DBCollat' => 'utf8_general_ci',        'swapPre'  => '',        'encrypt'  => false,        'compress' => false,        'strictOn' => false,        'failover' => [],        'port'     => 3306,    ];
25
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 厲害!基於SpringBoot和Vue的企業級中後臺開源專案