欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Docker構(gòu)建開(kāi)發(fā)環(huán)境的方法步驟(?Windows和mac)

 更新時(shí)間:2021年12月03日 10:27:34   作者:編程寶庫(kù)  
利用Docker,我們可以做很多事情。所以本文就詳細(xì)介紹了使用Docker構(gòu)建開(kāi)發(fā)環(huán)境的方法步驟,分為?Windows和mac版本,具有一定的參考價(jià)值,感興趣的可以了解一下

我們?cè)陂_(kāi)發(fā)中都會(huì)遇到這樣的問(wèn)題:在本地開(kāi)發(fā)好功能后,部署到服務(wù)器,或者其他人拉到本地接著開(kāi)發(fā)時(shí),會(huì)出現(xiàn)功能無(wú)法使用的情況。

這些異常情況,大多數(shù)時(shí)候是因?yàn)橄到y(tǒng)不同而導(dǎo)致的依賴(lài)差異。因此,為了解決這個(gè)問(wèn)題,就產(chǎn)生基于 Docker 構(gòu)建統(tǒng)一開(kāi)發(fā)環(huán)境的需求。

有關(guān) docker 的基本知識(shí),可以參照 docker教程。

1. 使用 Docker 的好處

部署方便

我們平常搭建環(huán)境常常需要耗費(fèi)很長(zhǎng)時(shí)間。對(duì)于團(tuán)隊(duì)協(xié)作時(shí)來(lái)說(shuō),每有新人進(jìn)來(lái),都需要浪費(fèi)這些可以避免的時(shí)間。而且搭建環(huán)境時(shí),也常常會(huì)產(chǎn)生的各種問(wèn)題,導(dǎo)致項(xiàng)目代碼運(yùn)行異常。如果使用了 Docker 的話(huà),只需最開(kāi)始的人寫(xiě)好開(kāi)發(fā)容器,其他人只需要 pull 下來(lái),即可完成項(xiàng)目環(huán)境的搭建,能有效避免無(wú)意義的時(shí)間浪費(fèi)。

隔離性

我們時(shí)常會(huì)在一臺(tái)電腦部署多個(gè)項(xiàng)目環(huán)境,若是直接安裝的話(huà),彼此間有可能會(huì)造成干擾,比如一個(gè)項(xiàng)目需要 Node.js 14,有的又需要 Node.js 12,若是直接在本機(jī)部署的話(huà),總是不能共存的,而是用 Docker 的話(huà),則可以避免該問(wèn)題。Docker 還能確保每個(gè)應(yīng)用程序只使用分配給它的資源(包括 CPU、內(nèi)存和磁盤(pán)空間)。一個(gè)特殊的軟件將不會(huì)使用你全部的可用資源,要不然這將導(dǎo)致性能降低,甚至讓其他應(yīng)用程序完全停止工作。

2. 安裝 Docker

1) Linux 安裝 Docker

以 Arch Linux 為例,其他發(fā)行版也大同小異,只是換成其包管理工具而已。

# 設(shè)置國(guó)內(nèi)鏡像站,國(guó)內(nèi)提速用的,可選操作
$ sudo pacman-mirrors -i -c China -m rank

# 使用 Pacman 安裝 Docker
$ sudo pacman -S docker

# 建立 docker 用戶(hù)組。默認(rèn)情況下,docker 命令會(huì)使用 Unix socket 與 Docker 引擎通訊。而只有 root 用戶(hù)和 docker 組的用戶(hù)才可以訪(fǎng)問(wèn) Docker 引擎的 Unix socket。出于安全考慮,一般 Linux 系統(tǒng)上不會(huì)直接使用 root 用戶(hù)。因此,更好地做法是將需要使用 docker 的用戶(hù)加入 docker 用戶(hù)組。
$ sudo groupadd docker

# 將當(dāng)前用戶(hù)加入 docker 組,退出當(dāng)前終端并重新登錄后生效
$ sudo usermod -aG docker $USER

# 測(cè)試是否安裝成功
$ docker run --rm hello-world

2) Windows 10

Windows 10 下安裝 docker 比較簡(jiǎn)單,有如下幾種方式:

手動(dòng)下載安裝:

下載 Docker Desktop for Windows。由于官網(wǎng)下載比較慢,需要本地下載的可以點(diǎn)此鏈接

下載好之后雙擊 Docker Desktop Installer.exe 開(kāi)始安裝。

使用winget安裝:

$ winget install Docker.DockerDesktop

運(yùn)行 Docker:

在 Windows 搜索欄輸入 Docker 點(diǎn)擊 Docker Desktop 開(kāi)始運(yùn)行。

Docker 啟動(dòng)之后會(huì)在 Windows 任務(wù)欄出現(xiàn)鯨魚(yú)圖標(biāo)。

等待片刻,當(dāng)鯨魚(yú)圖標(biāo)靜止時(shí),說(shuō)明 Docker 啟動(dòng)成功,之后你可以打開(kāi) PowerShell/CMD/Windows Terminal 使用 Docker。

3) macOS

使用 Homebrew 安裝:

Homebrew 的 Cask 已經(jīng)支持 Docker Desktop for Mac,因此可以很方便的使用 Homebrew Cask 來(lái)進(jìn)行安裝:

$ brew install --cask docker

手動(dòng)下載安裝:

如果需要手動(dòng)下載,請(qǐng)點(diǎn)擊下載 Docker Desktop for Mac。由于官網(wǎng)下載比較慢,需要本地下載的可以點(diǎn)此鏈接

請(qǐng)注意下載對(duì)應(yīng)芯片類(lèi)型的軟件,M1 和 Intel 芯片所對(duì)應(yīng)的版本不通用。

如同 macOS 其它軟件一樣,安裝也非常簡(jiǎn)單,雙擊下載的 .dmg 文件,然后將那只叫 Moby 的鯨魚(yú)圖標(biāo)拖拽到 Application 文件夾即可(其間需要輸入用戶(hù)密碼)。

運(yùn)行 Docker:

從應(yīng)用中找到 Docker 圖標(biāo)并點(diǎn)擊運(yùn)行。

運(yùn)行之后,會(huì)在右上角菜單欄看到多了一個(gè)鯨魚(yú)圖標(biāo),這個(gè)圖標(biāo)表明了 Docker 的運(yùn)行狀態(tài)。

安裝完成并啟動(dòng)后,我們可以在終端通過(guò)命令檢查安裝后的 Docker 版本。

$ docker --version

3. Docker 換源

docker 默認(rèn)的源是國(guó)外的,國(guó)內(nèi)訪(fǎng)問(wèn)的話(huà)速度比較慢,因此可以換為國(guó)內(nèi)源,提高鏡像拉去速度。

1) Linux 換源

Linux 下的比較簡(jiǎn)單,創(chuàng)建個(gè) deamon.json 文件寫(xiě)下配置就好:

$ vi /etc/docker/deamon.json

# 輸入鏡像源
{
  # 只換一個(gè)源也是可以的,可以直接用字符串,而不是數(shù)組。
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn"
  ],
}

# :wq 保存退出后重啟 docker
$ systemctl restart docker

2) Windows 和 Mac 換源

Windows 和 Mac 都是使用的 Docker Desktop,所以直接在 GUI 中配置即可。

打開(kāi) Docker 界面,點(diǎn)擊 Docker Engine:

在右邊輸出框中,輸入鏡像源:

{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com",
        "https://docker.mirrors.ustc.edu.cn"
    ],
    }

4. 編寫(xiě) Dockerfile

安裝完 Docker 之后,接下來(lái)我們便可以來(lái)編寫(xiě)我們自己的項(xiàng)目開(kāi)發(fā)環(huán)境了。本文將以前端開(kāi)發(fā)環(huán)境為例,構(gòu)建 Dockerfile。

包含環(huán)境:

  • node.js 14.17
  • npm 6.14
  • yarn 1.22
# 前端開(kāi)發(fā)中,時(shí)常需要使用 shell 命令,而有一個(gè)較為完整的環(huán)境比較重要,因此選擇了使用 ubuntu 作為基礎(chǔ),若在意容器大小的話(huà),可自行選擇適用的基礎(chǔ)鏡像
FROM ubuntu
LABEL org.opencontainers.image.authors="codebaokur@codebaoku.com"

# 設(shè)置環(huán)境變量 
ENV DEBIAN_FRONTEND noninteractive

# 設(shè)置時(shí)區(qū)
ARG TZ=Asia/Shanghai
ENV TZ ${TZ}

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 用 root 用戶(hù)操作
USER root

# 更換阿里云源,在國(guó)內(nèi)可以加快速度
RUN sed -i "s/security.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list && \
    sed -i "s/archive.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list && \
    sed -i "s/security-cdn.ubuntu.com/mirrors.aliyun.com/" /etc/apt/sources.list
RUN  apt-get clean

# 更新源,安裝相應(yīng)工具
RUN apt-get update && apt-get install -y \
    zsh \
    vim \
    wget \
    curl \
    python \
    git-core

#  安裝 zsh,以后進(jìn)入容器中時(shí),更加方便地使用 shell
RUN git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh && \
    cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc && \
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && \
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && \
    sed -i 's/^plugins=(/plugins=(zsh-autosuggestions zsh-syntax-highlighting z /' ~/.zshrc && \
    chsh -s /bin/zsh

# 創(chuàng)建 me 用戶(hù)
RUN useradd --create-home --no-log-init --shell /bin/zsh -G sudo me && \
    adduser me sudo && \
    echo 'me:password' | chpasswd

# 為 me 安裝 omz
USER me
RUN git clone https://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh && \
    cp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc && \
    git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions && \
    git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting && \
    sed -i 's/^plugins=(/plugins=(zsh-autosuggestions zsh-syntax-highlighting z /' ~/.zshrc

# 安裝 nvm 和 node
ENV NVM_DIR=/home/me/.nvm \
    NODE_VERSION=v14

RUN mkdir -p $NVM_DIR && \
    curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash && \
    . $NVM_DIR/nvm.sh && \
    nvm install ${NODE_VERSION} && \
    nvm use ${NODE_VERSION} && \
    nvm alias ${NODE_VERSION} && \
    ln -s `npm bin --global` /home/me/.node-bin && \
    npm install --global nrm && \
    nrm use taobao && \
    echo '' >> ~/.zshrc && \
    echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.zshrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.zshrc

# 安裝 yarn
RUN curl -o- -L https://yarnpkg.com/install.sh | bash; \
    echo '' >> ~/.zshrc && \
    echo 'export PATH="$HOME/.yarn/bin:$PATH"' >> ~/.zshrc

# Add NVM binaries to root's .bashrc
USER root

RUN echo '' >> ~/.zshrc && \
    echo 'export NVM_DIR="/home/me/.nvm"' >> ~/.zshrc && \
    echo '[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm' >> ~/.zshrc && \
    echo '' >> ~/.zshrc && \
    echo 'export YARN_DIR="/home/me/.yarn"' >> ~/.zshrc && \
    echo 'export PATH="$YARN_DIR/bin:$PATH"' >> ~/.zshrc

# Add PATH for node & YARN
ENV PATH $PATH:/home/me/.node-bin:/home/me/.yarn/bin

# 刪除 apt/lists,可以減少最終鏡像大小
RUN rm -rf /var/lib/apt/lists/*

WORKDIR /var/www
編寫(xiě)完 Dockerfile 后,構(gòu)建即可:

docker build -t frontend/react:v1 .
構(gòu)建完之后可以直接運(yùn)行:

# 以 me 身份運(yùn)行,推薦方式
docker run --user=me -it frontend/react:v1 /bin/zsh

# 以 root 角色運(yùn)行
docker run -it frontend/react:v1 /bin/zsh

5. 編寫(xiě) docker-compose.yml

在開(kāi)發(fā)時(shí),我們尋常需要多個(gè)容器配合使用,比如需要配合 mysql 或其他容器使用時(shí),使用 docker-compose.yml 可以更好的組織他們。

version: '2'
services:
    react:
    build:
        context: .
        dockerfile: react/Dockerfile
    tty: true
    ports:
        - 30000:3000
    volumes:
        - ./react/www:/var/www
    networks:
        - frontend
    mysql:
    image: mysql:5.7
    ports:
        - 33060:3306
    volumes:
        - ./mysql/data:/var/lib/mysql
        - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
    environment:
        - MYSQL_ROOT_PASSWORD=password
    networks:
        - frontend

# 將容器置于同一 networks 即可直接通過(guò)容器名訪(fǎng)問(wèn)
networks:
    frontend:
    driver: bridge

6. 啟動(dòng)容器

編寫(xiě)完上述 Dockerfile 和 docker-compose.yml 后,即可愉快的開(kāi)始開(kāi)發(fā)了!

# 進(jìn)入 docker-compose.yml 所在目錄
$ cd frontend

# 后臺(tái)啟動(dòng) docker-compose.yml 中所有容器,若容器沒(méi)有構(gòu)建則會(huì)先構(gòu)建
$ docker-compose up -d

# 進(jìn)入 react 容器中,以便命令行交互
$ docker-compose exec --user=me react /bin/zsh

為了測(cè)試容器間是否能相互訪(fǎng)問(wèn),可以使用編寫(xiě)如下文件,數(shù)據(jù)庫(kù)需自行創(chuàng)建:

// index.js
const mysql = require('mysql')
const connection = mysql.createConnection({
    host: 'mysql',
    user: 'root',
    password: 'password',
    database: 'test',
})

connection.connect();

connection.query(`SELECT * FROM users`, function (error, results, fields) {
    if (error) throw error;
    console.log(results)
})

connection.end();

之后運(yùn)行,即可看到結(jié)果:

$ node index.js
[ RowDataPacket { id: 1, name: 'Caster' } ]

7. 總結(jié)

使用 Docker 來(lái)搭建開(kāi)發(fā)環(huán)境十分方便,一次搭建,即可在許多機(jī)器上多次使用,即使是要重裝系統(tǒng),也不必在重復(fù)配置。

如不喜歡寫(xiě) Dockerfile 的話(huà),也可以直接開(kāi)啟一個(gè)容器,然后進(jìn)入容器配置完后,使用 docker save/export 導(dǎo)出即可。

參考資料:

1. Docker教程

2. Docker構(gòu)建開(kāi)發(fā)環(huán)境

到此這篇關(guān)于使用Docker構(gòu)建開(kāi)發(fā)環(huán)境的方法步驟( Windows和mac)的文章就介紹到這了,更多相關(guān)Docker構(gòu)建開(kāi)發(fā)環(huán)境內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談docker Dockerfile 指令 VOLUME 介紹

    淺談docker Dockerfile 指令 VOLUME 介紹

    本篇文章主要介紹了淺談docker Dockerfile 指令 VOLUME 介紹 ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • 詳解Docker Volume 之權(quán)限管理

    詳解Docker Volume 之權(quán)限管理

    這篇文章主要介紹了詳解Docker Volume 之權(quán)限管理,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 詳解Docker創(chuàng)建php開(kāi)發(fā)環(huán)境遇到的權(quán)限問(wèn)題解決方案

    詳解Docker創(chuàng)建php開(kāi)發(fā)環(huán)境遇到的權(quán)限問(wèn)題解決方案

    本篇文章主要介紹了Docker創(chuàng)建php開(kāi)發(fā)環(huán)境遇到的權(quán)限問(wèn)題解決方案,具有一定的參考價(jià)值,有需要的可以了解一下。
    2016-11-11
  • Docker部署Kafka以及Spring Kafka實(shí)現(xiàn)

    Docker部署Kafka以及Spring Kafka實(shí)現(xiàn)

    這篇文章主要介紹了Docker部署Kafka以及Spring Kafka實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • dockerfile中ENTRYPOINT與CMD的結(jié)合使用及區(qū)別

    dockerfile中ENTRYPOINT與CMD的結(jié)合使用及區(qū)別

    這篇文章主要介紹了dockerfile中ENTRYPOINT與CMD的結(jié)合使用,大家都知道CMD 與 ENTRYPOINT都是用于指定啟動(dòng)容器執(zhí)行的命令,那么他們倆有什么區(qū)別呢,本文給大家詳細(xì)介紹,需要的朋友可以參考下
    2021-08-08
  • supervisor下的Dockerfile的多服務(wù)鏡像封裝操作

    supervisor下的Dockerfile的多服務(wù)鏡像封裝操作

    這篇文章主要介紹了supervisor下的Dockerfile的多服務(wù)鏡像封裝操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Docker安裝Tomcat無(wú)法訪(fǎng)問(wèn)的問(wèn)題及解決

    Docker安裝Tomcat無(wú)法訪(fǎng)問(wèn)的問(wèn)題及解決

    這篇文章主要介紹了Docker安裝Tomcat無(wú)法訪(fǎng)問(wèn)的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Docker為網(wǎng)絡(luò)bridge模式指定容器ip的方法

    Docker為網(wǎng)絡(luò)bridge模式指定容器ip的方法

    Docker在創(chuàng)建容器時(shí)有四種網(wǎng)絡(luò)模式,bridge為默認(rèn)不需要用--net去指定,其他三種模式需要在創(chuàng)建容器時(shí)使用--net去指定。那Docker為網(wǎng)絡(luò)bridge模式指定容器ip該如何實(shí)現(xiàn)呢?下面通過(guò)通過(guò)這篇文章一起看看吧,文中給出了詳細(xì)的示例代碼,有需要的可以參考借鑒。
    2016-11-11
  • Docker Stack 部署web集群的方法步驟

    Docker Stack 部署web集群的方法步驟

    這篇文章主要介紹了Docker Stack 部署web集群的方法步驟,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2019-02-02
  • harbor修改配置文件后重啟操作

    harbor修改配置文件后重啟操作

    這篇文章主要介紹了harbor修改配置文件后重啟操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11

最新評(píng)論