<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          使用 Docker 高效搭建本地開(kāi)發(fā)環(huán)境(詳細(xì)教程)

          共 15661字,需瀏覽 32分鐘

           ·

          2023-06-25 23:53

          Docker本地開(kāi)發(fā)環(huán)境的好處

          試錯(cuò)

          對(duì)開(kāi)發(fā)者而言,每天會(huì)催生出的各式各樣的新技術(shù)都需要嘗試,然而開(kāi)發(fā)者卻不太可能為他們一一搭建好環(huán)境并進(jìn)行測(cè)試。時(shí)間非常寶貴,正是得益于 Docker,讓我們有可能在一條或者幾條命令內(nèi)就搭建完環(huán)境,而且這個(gè)環(huán)境大到一個(gè)特定版本的操作系統(tǒng),小到一個(gè)軟件。Docker 有一個(gè)傻瓜化的獲取軟件的方法,Docker后臺(tái)會(huì)自動(dòng)獲得環(huán)境鏡像并且運(yùn)行環(huán)境。

          統(tǒng)一開(kāi)發(fā)和生產(chǎn)環(huán)境

          對(duì)于一般的小公司來(lái)說(shuō),搭建一個(gè)公用的開(kāi)發(fā)環(huán)境是一件不那么劃算的事情。那么就可以用Docker來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境,因?yàn)椴还苣阌玫氖?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(60, 112, 198);">Windows、Mac 還是 Ubuntu。如果生產(chǎn)環(huán)境也使用的Docker的話,你甚至可以直接打包一套環(huán)境,直接丟上去就可以運(yùn)行了,再也不用擔(dān)心開(kāi)發(fā)-生產(chǎn)環(huán)境之間的差異了。

          高性能

          虛擬機(jī)的粒度是虛擬出的機(jī) ,而Docker的粒度則是被限制的應(yīng)用 ,相比較而言 Docker 的內(nèi)存占用更少,更加輕量級(jí),性能也更優(yōu)。

          而秒級(jí)的啟動(dòng),也可以讓我們啟動(dòng)電腦時(shí)候,開(kāi)發(fā)環(huán)境的運(yùn)行是無(wú)感知的。

          成果展示

          我們可能經(jīng)常要給用戶或者是同事展示一樣功能的,但是搭建演示環(huán)境的過(guò)程卻是非常麻煩的。現(xiàn)在可以直接將我們的鏡像打包丟過(guò)去,而不必去做任何環(huán)境配置的工作,同時(shí)也不必?fù)?dān)心他們的環(huán)境配置會(huì)導(dǎo)致我們的產(chǎn)品無(wú)法運(yùn)行。

          安裝Docker

          mac平臺(tái)下,就是去下載一個(gè)dmg的安裝文件。下載好了之后,雙擊,然后拖入就可以了,windows應(yīng)該也是類似的。

          就是安裝qq一樣簡(jiǎn)單,傻瓜式的。

          附上dockerhub上的下載鏈接:

          https://hub.docker.com/search/?type=edition&offering=community&q=

          成功之后屬于docker version如果出來(lái)版本信息就是安裝成功,類似如下

          Client: Docker Engine - Community
           Version:           18.09.0
           API version:       1.39
           Go version:        go1.10.4
           Git commit:        4d60db4
           Built:             Wed Nov  7 00:47:43 2018
           OS/Arch:           darwin/amd64
           Experimental:      false

          Server: Docker Engine - Community
           Engine:
            Version:          18.09.0
            API version:      1.39 (minimum version 1.12)
            Go version:       go1.10.4
            Git commit:       4d60db4
            Built:            Wed Nov  7 00:55:00 2018
            OS/Arch:          linux/amd64
            Experimental:     true

          安裝docker-composer

          一般來(lái)說(shuō),mac安裝docker之后就會(huì)攜帶docker-composer

          其他平臺(tái),附上下載鏈接:

          https://github.com/docker/compose/releases

          安裝完成之后可以輸入命令檢測(cè)

          ?  ~ docker-compose version
          docker-compose version 1.23.2, build 1110ad01
          docker-py version: 3.6.0
          CPython version: 3.6.6
          OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018

          如果沒(méi)有出現(xiàn)版本相關(guān)信息,可以嘗試再次安裝

          下載laradock

          laradock的項(xiàng)目地址是https://github.com/laradock/laradock 我們找一個(gè)地方clone下來(lái)即可

          我這里是在我的用戶目錄下面新建了一個(gè)Docker目錄,然后clone了項(xiàng)目下來(lái)

          配置env文件

          1. 拷貝example成.env

            cp env-example env
          2. .env文件中APP_CODE_PATH_HOST是本地路徑 APP_CODE_PATH_CONTAINER是遠(yuǎn)程映射路徑,看需求修改,大多數(shù)情況下是不需要的

          3. 如果有調(diào)試代碼的需求,也可以將PHP_FPM_INSTALL_XDEBUGWORKSPACE_INSTALL_XDEBUG兩個(gè)選項(xiàng)打開(kāi)

          4. 如果還有其他的需求,可以在.env里面搜索,里面已經(jīng)將大多數(shù)配置項(xiàng)都給獨(dú)立出來(lái)了

          運(yùn)行容器

          進(jìn)入到laradock的工作目錄下面,就是clone的項(xiàng)目的根目錄我的工作目錄就是~/Docker/laradock

          然后運(yùn)行如下命令

          docker-compose up -d nginx mysql

          就會(huì)看到在自動(dòng)執(zhí)行build操作,并且build完了之后自動(dòng)后臺(tái)啟動(dòng)了如下容器

          • nginx
          • php-fpm
          • workspace
          • mysql

          那是因?yàn)?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(60, 112, 198);">php-fpm和workspace還有docker-in-docker是隨nginx一并啟動(dòng)的

          所以實(shí)際上

          docker-compose up -d nginx mysql

          docker-compose up -d nginx workspace php-fpm mysql

          這兩條命令的效果是一樣的,可以都帶上,也可以不寫。

          up命令在第一次啟動(dòng)的時(shí)候?qū)嶋H上就是build + start的組合,如果容器不存在,那么就build一個(gè)容器,并且啟動(dòng)服務(wù),如果容器存在那么直接啟動(dòng)服務(wù),大概就是這么個(gè)意思 -d的意思是后臺(tái)運(yùn)行

          配置web項(xiàng)目

          一下是我laravel項(xiàng)目的部分配置

          DB_CONNECTION=mysql
          DB_HOST=mysql
          DB_PORT=3306
          DB_DATABASE=blog
          DB_USERNAME=root
          DB_PASSWORD=root
          ......

          注意,數(shù)據(jù)庫(kù)主機(jī)必須得是別名才可以,如果DB_CONNECTION這個(gè)地方輸入172.0.0.1或者是localhost都是會(huì)連接失敗的。

          在其它的項(xiàng)目中也必須是這樣的,配置數(shù)據(jù)庫(kù)鏈接,redis,或者MemCache鏈接都必須設(shè)置成具體的別名。或者你說(shuō)我找到各個(gè)容器的ip,可以嘛。可以,但是并不建議這樣做,因?yàn)閕p是會(huì)變動(dòng)的。

          具體別名可以參考./docker-compose.yml文件中的設(shè)置

          這個(gè)主要的技術(shù)實(shí)現(xiàn)應(yīng)該是用了docker的虛擬網(wǎng)橋技術(shù).

          配置宿主機(jī)的host

          因?yàn)椋覀冊(cè)L問(wèn)的時(shí)候,是通過(guò)宿主機(jī)上面的瀏覽器發(fā)送請(qǐng)求的,所以,配置宿主機(jī)上面的host必不可少。

          vim /etc/hosts

          我這里加入一條我自己設(shè)置的虛擬域名

          127.0.0.1       blog.test

          然后保存,刷新下host。

          配置nginx

          進(jìn)入到./laradock/nginx/sites文件夾,然后ll一下,我們會(huì)發(fā)現(xiàn),laradock已經(jīng)幫我們放了好多列舉的文件進(jìn)來(lái)

          app.conf.example default.conf laravel.conf.example symfony.conf.example

          根據(jù)需求拷貝一份,然后修改一下就可以了,都不是很難,由于我們本地是laravel開(kāi)發(fā)的博客項(xiàng)目,所以我就直接拷貝laravel.conf.example,然后使用vim打開(kāi)

          cp laravel.conf.example blog.conf vim blog.conf

          打開(kāi)后的內(nèi)容...

          server {

              listen 80;
              listen [::]:80;

              # For https
              # listen 443 ssl;
              # listen [::]:443 ssl ipv6only=on;
              # ssl_certificate /etc/nginx/ssl/default.crt;
              # ssl_certificate_key /etc/nginx/ssl/default.key;

              server_name laravel.test;
              root /var/www/laravel/public;
              index index.php index.html index.htm;

              location / {
                   try_files $uri $uri/ /index.php$is_args$args;
              }

              location ~ \.php$ {
                  try_files $uri /index.php =404;
                  fastcgi_pass php-upstream;
                  fastcgi_index index.php;
                  fastcgi_buffers 16 16k;
                  fastcgi_buffer_size 32k;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  #fixes timeouts
                  fastcgi_read_timeout 600;
                  include fastcgi_params;

          我們會(huì)發(fā)現(xiàn),如果沒(méi)有特殊需求的話,這個(gè)里面大多數(shù)地方我們并不需要修改。我們只需要關(guān)注server_nameroot這兩個(gè)參數(shù),把這個(gè)里面的laravel換成我們項(xiàng)目名就可以了,這里我們換成blog

          下面是修改后的內(nèi)容

          server {

              listen 80;
              listen [::]:80;

              # For https
              # listen 443 ssl;
              # listen [::]:443 ssl ipv6only=on;
              # ssl_certificate /etc/nginx/ssl/default.crt;
              # ssl_certificate_key /etc/nginx/ssl/default.key;

              server_name blog.test;
              root /var/www/blog/public;
              index index.php index.html index.htm;

              location / {
                   try_files $uri $uri/ /index.php$is_args$args;
              }

              location ~ \.php$ {
                  try_files $uri /index.php =404;
                  fastcgi_pass php-upstream;
                  fastcgi_index index.php;
                  fastcgi_buffers 16 16k;
                  fastcgi_buffer_size 32k;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  #fixes timeouts
                  fastcgi_read_timeout 600;
                  include fastcgi_params;

          訪問(wèn)

          輸入url

          http://blog.test/

          瀏覽器返回結(jié)果

          Docker本地開(kāi)發(fā)環(huán)境的好處

          試錯(cuò)

          對(duì)開(kāi)發(fā)者而言,每天會(huì)催生出的各式各樣的新技術(shù)都需要嘗試,然而開(kāi)發(fā)者卻不太可能為他們一一搭建好環(huán)境并進(jìn)行測(cè)試。時(shí)間非常寶貴,正是得益于 Docker,讓我們有可能在一條或者幾條命令內(nèi)就搭建完環(huán)境,而且這個(gè)環(huán)境大到一個(gè)特定版本的操作系統(tǒng),小到一個(gè)軟件。Docker 有一個(gè)傻瓜化的獲取軟件的方法,Docker后臺(tái)會(huì)自動(dòng)獲得環(huán)境鏡像并且運(yùn)行環(huán)境。

          統(tǒng)一開(kāi)發(fā)和生產(chǎn)環(huán)境

          對(duì)于一般的小公司來(lái)說(shuō),搭建一個(gè)公用的開(kāi)發(fā)環(huán)境是一件不那么劃算的事情。那么就可以用Docker來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境,因?yàn)椴还苣阌玫氖?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(60, 112, 198);">Windows、Mac 還是 Ubuntu。如果生產(chǎn)環(huán)境也使用的Docker的話,你甚至可以直接打包一套環(huán)境,直接丟上去就可以運(yùn)行了,再也不用擔(dān)心開(kāi)發(fā)-生產(chǎn)環(huán)境之間的差異了。

          高性能

          虛擬機(jī)的粒度是虛擬出的機(jī) ,而Docker的粒度則是被限制的應(yīng)用 ,相比較而言 Docker 的內(nèi)存占用更少,更加輕量級(jí),性能也更優(yōu)。

          而秒級(jí)的啟動(dòng),也可以讓我們啟動(dòng)電腦時(shí)候,開(kāi)發(fā)環(huán)境的運(yùn)行是無(wú)感知的。

          成果展示

          我們可能經(jīng)常要給用戶或者是同事展示一樣功能的,但是搭建演示環(huán)境的過(guò)程卻是非常麻煩的。現(xiàn)在可以直接將我們的鏡像打包丟過(guò)去,而不必去做任何環(huán)境配置的工作,同時(shí)也不必?fù)?dān)心他們的環(huán)境配置會(huì)導(dǎo)致我們的產(chǎn)品無(wú)法運(yùn)行。

          安裝Docker

          mac平臺(tái)下,就是去下載一個(gè)dmg的安裝文件。下載好了之后,雙擊,然后拖入就可以了,windows應(yīng)該也是類似的。

          就是安裝qq一樣簡(jiǎn)單,傻瓜式的。

          附上dockerhub上的下載鏈接:

          https://hub.docker.com/search/?type=edition&offering=community&q=

          成功之后屬于docker version如果出來(lái)版本信息就是安裝成功,類似如下

          Client: Docker Engine - Community
           Version:           18.09.0
           API version:       1.39
           Go version:        go1.10.4
           Git commit:        4d60db4
           Built:             Wed Nov  7 00:47:43 2018
           OS/Arch:           darwin/amd64
           Experimental:      false

          Server: Docker Engine - Community
           Engine:
            Version:          18.09.0
            API version:      1.39 (minimum version 1.12)
            Go version:       go1.10.4
            Git commit:       4d60db4
            Built:            Wed Nov  7 00:55:00 2018
            OS/Arch:          linux/amd64
            Experimental:     true

          安裝docker-composer

          一般來(lái)說(shuō),mac安裝docker之后就會(huì)攜帶docker-composer

          其他平臺(tái),附上下載鏈接:

          https://github.com/docker/compose/releases

          安裝完成之后可以輸入命令檢測(cè)

          ?  ~ docker-compose version
          docker-compose version 1.23.2, build 1110ad01
          docker-py version: 3.6.0
          CPython version: 3.6.6
          OpenSSL version: OpenSSL 1.1.0h  27 Mar 2018

          如果沒(méi)有出現(xiàn)版本相關(guān)信息,可以嘗試再次安裝

          下載laradock

          laradock的項(xiàng)目地址是https://github.com/laradock/laradock 我們找一個(gè)地方clone下來(lái)即可

          我這里是在我的用戶目錄下面新建了一個(gè)Docker目錄,然后clone了項(xiàng)目下來(lái)

          配置env文件

          1. 拷貝example成.env

            cp env-example env
          2. .env文件中APP_CODE_PATH_HOST是本地路徑 APP_CODE_PATH_CONTAINER是遠(yuǎn)程映射路徑,看需求修改,大多數(shù)情況下是不需要的

          3. 如果有調(diào)試代碼的需求,也可以將PHP_FPM_INSTALL_XDEBUGWORKSPACE_INSTALL_XDEBUG兩個(gè)選項(xiàng)打開(kāi)

          4. 如果還有其他的需求,可以在.env里面搜索,里面已經(jīng)將大多數(shù)配置項(xiàng)都給獨(dú)立出來(lái)了

          運(yùn)行容器

          進(jìn)入到laradock的工作目錄下面,就是clone的項(xiàng)目的根目錄我的工作目錄就是~/Docker/laradock

          然后運(yùn)行如下命令

          docker-compose up -d nginx mysql

          就會(huì)看到在自動(dòng)執(zhí)行build操作,并且build完了之后自動(dòng)后臺(tái)啟動(dòng)了如下容器

          • nginx
          • php-fpm
          • workspace
          • mysql

          那是因?yàn)?code style="margin-right: 2px;margin-left: 2px;padding: 2px 4px;outline: 0px;font-size: 14px;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: "Operator Mono", Consolas, Monaco, Menlo, monospace;word-break: break-all;color: rgb(60, 112, 198);">php-fpm和workspace還有docker-in-docker是隨nginx一并啟動(dòng)的

          所以實(shí)際上

          docker-compose up -d nginx mysql

          docker-compose up -d nginx workspace php-fpm mysql

          這兩條命令的效果是一樣的,可以都帶上,也可以不寫。

          up命令在第一次啟動(dòng)的時(shí)候?qū)嶋H上就是build + start的組合,如果容器不存在,那么就build一個(gè)容器,并且啟動(dòng)服務(wù),如果容器存在那么直接啟動(dòng)服務(wù),大概就是這么個(gè)意思 -d的意思是后臺(tái)運(yùn)行

          配置web項(xiàng)目

          一下是我laravel項(xiàng)目的部分配置

          DB_CONNECTION=mysql
          DB_HOST=mysql
          DB_PORT=3306
          DB_DATABASE=blog
          DB_USERNAME=root
          DB_PASSWORD=root
          ......

          注意,數(shù)據(jù)庫(kù)主機(jī)必須得是別名才可以,如果DB_CONNECTION這個(gè)地方輸入172.0.0.1或者是localhost都是會(huì)連接失敗的。

          在其它的項(xiàng)目中也必須是這樣的,配置數(shù)據(jù)庫(kù)鏈接,redis,或者MemCache鏈接都必須設(shè)置成具體的別名。或者你說(shuō)我找到各個(gè)容器的ip,可以嘛。可以,但是并不建議這樣做,因?yàn)閕p是會(huì)變動(dòng)的。

          具體別名可以參考./docker-compose.yml文件中的設(shè)置

          這個(gè)主要的技術(shù)實(shí)現(xiàn)應(yīng)該是用了docker的虛擬網(wǎng)橋技術(shù).

          配置宿主機(jī)的host

          因?yàn)椋覀冊(cè)L問(wèn)的時(shí)候,是通過(guò)宿主機(jī)上面的瀏覽器發(fā)送請(qǐng)求的,所以,配置宿主機(jī)上面的host必不可少。

          vim /etc/hosts

          我這里加入一條我自己設(shè)置的虛擬域名

          127.0.0.1       blog.test

          然后保存,刷新下host。

          配置nginx

          進(jìn)入到./laradock/nginx/sites文件夾,然后ll一下,我們會(huì)發(fā)現(xiàn),laradock已經(jīng)幫我們放了好多列舉的文件進(jìn)來(lái)

          app.conf.example default.conf laravel.conf.example symfony.conf.example

          根據(jù)需求拷貝一份,然后修改一下就可以了,都不是很難,由于我們本地是laravel開(kāi)發(fā)的博客項(xiàng)目,所以我就直接拷貝laravel.conf.example,然后使用vim打開(kāi)

          cp laravel.conf.example blog.conf vim blog.conf

          打開(kāi)后的內(nèi)容...

          server {

              listen 80;
              listen [::]:80;

              # For https
              # listen 443 ssl;
              # listen [::]:443 ssl ipv6only=on;
              # ssl_certificate /etc/nginx/ssl/default.crt;
              # ssl_certificate_key /etc/nginx/ssl/default.key;

              server_name laravel.test;
              root /var/www/laravel/public;
              index index.php index.html index.htm;

              location / {
                   try_files $uri $uri/ /index.php$is_args$args;
              }

              location ~ \.php$ {
                  try_files $uri /index.php =404;
                  fastcgi_pass php-upstream;
                  fastcgi_index index.php;
                  fastcgi_buffers 16 16k;
                  fastcgi_buffer_size 32k;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  #fixes timeouts
                  fastcgi_read_timeout 600;
                  include fastcgi_params;

          我們會(huì)發(fā)現(xiàn),如果沒(méi)有特殊需求的話,這個(gè)里面大多數(shù)地方我們并不需要修改。我們只需要關(guān)注server_nameroot這兩個(gè)參數(shù),把這個(gè)里面的laravel換成我們項(xiàng)目名就可以了,這里我們換成blog

          下面是修改后的內(nèi)容

          server {

              listen 80;
              listen [::]:80;

              # For https
              # listen 443 ssl;
              # listen [::]:443 ssl ipv6only=on;
              # ssl_certificate /etc/nginx/ssl/default.crt;
              # ssl_certificate_key /etc/nginx/ssl/default.key;

              server_name blog.test;
              root /var/www/blog/public;
              index index.php index.html index.htm;

              location / {
                   try_files $uri $uri/ /index.php$is_args$args;
              }

              location ~ \.php$ {
                  try_files $uri /index.php =404;
                  fastcgi_pass php-upstream;
                  fastcgi_index index.php;
                  fastcgi_buffers 16 16k;
                  fastcgi_buffer_size 32k;
                  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                  #fixes timeouts
                  fastcgi_read_timeout 600;
                  include fastcgi_params;

          訪問(wèn)

          輸入url

          http://blog.test/

          瀏覽器返回結(jié)果

          瀏覽器返回結(jié)果

          來(lái)源:juejin.cn/post/6844903828949565448

          推薦

          1. 優(yōu)秀的 Java 代碼都是如何分層的 ?看了直呼NB!

          2. IDEA新UI速覽,成了 VS Code 的樣子?

          3. 如果有一千萬(wàn)數(shù)據(jù),怎么用Java快速查詢?

          4. 廢物利用,拿自己的舊電腦搭建個(gè)服務(wù)器吧!



          最近面試BAT,整理一份面試資料Java面試BATJ通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
          獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù) Java 領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
          PS:因公眾號(hào)平臺(tái)更改了推送規(guī)則,如果不想錯(cuò)過(guò)內(nèi)容,記得讀完點(diǎn)一下在看,加個(gè)星標(biāo),這樣每次新文章推送才會(huì)第一時(shí)間出現(xiàn)在你的訂閱列里。
          點(diǎn)“在看”支持呀,謝謝啦

          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  AV黄色在线网站 | 中国人与拘一级毛片 | 乱伦视频91 | 国产丝袜人妖CD露出 | v天堂最新资源在线网 |