docker run --link
?docker run
的工具.env
環境變數Host do
HostName do.taichunmin.tk
User root
IdentityFile ~/.ssh/taichunmin@gmail.com.key
git clone https://github.com/taichunmin/git-it-course-docker.git
cd git-it-course-docker
bash ./install.sh
docker-compose up -d
docker-compose up -d --scale client = 3
docker-compose ps
docker-compose pull
docker-compose exec [服務] [指令]
docker-compose logs [服務]
docker-compose down
docker-compose ps
看第幾個 clientdocker-compose exec --index=2 client bash
passwd
強制改密碼exit
退出Dockerfile
建立docker-compose.yml
docker-compose up -d
graph LR
Dashboard --- |"讀寫資料庫<br />(backend)"| Redis
Dashboard -.-> |"查看儀錶板<br />(Port 80)"| 瀏覽器(瀏覽器)
Client-1 --> |"回報解題狀況<br />(frontend)"| Dashboard
Client-2 --> |"回報解題狀況<br />(frontend)"| Dashboard
Client-N --> |"回報解題狀況<br />(frontend)"| Dashboard
SSH-1(SSH-1) -.-> |"Port 32768"| Client-1
SSH-2(SSH-2) -.-> |"Port 32769"| Client-2
SSH-N(SSH-N) -.-> |"Port N"| Client-N
version: '2'
services:
dashboard: # 儀錶板
image: taichunmin/git-it-course-docker:dashboard
networks:
- frontend # 給瀏覽器和 client 連線用
- backend # 連線資料庫用
volumes: # 掛載外部的檔案到 docker 容器中
# 為了取得所有 client 對外的 SSH port
- /var/run/docker.sock:/var/run/docker.sock
# 儀錶板的程式碼
- ./webapp:/var/www/html
# 登入 Shell 後的歡迎訊息
- ./dashboard/motd:/etc/motd:ro
ports: # port 轉發設定
- "80:80" # 把主機的 80 對應到 docker 的 80
restart: always # 異常結束自動重啟
version: '2'
services:
client: # git-it 環境
image: taichunmin/git-it-course-docker:client
networks:
- frontend # 給 client 連線到 dashboard 用
depends_on: # 相依的服務,compose 會一起啟用這個服務
- dashboard
volumes:
# 登入 Shell 後的歡迎訊息
- ./client/motd:/etc/motd:ro
ports: # port 轉發設定
- "22" # 把主機的隨機 port 對應到 docker 的 22
version: '2'
services:
redis:
# 使用 Docker Hub 上面提供的 redis
image: redis:latest
networks:
- backend # 給 dashboard 連線用
restart: always # 異常結束自動重啟
docker-compose.yml
# docker-compose up -d --scale client=5
# docker-compose exec dashboard bash
apt-get update
apt-get install -y dnsutils
dig +short client
docker build
docker run -it ubuntu:latest bash
Dockerfile
裡面.dockerignore
docker build
會把目前目錄丟給 dockerd.gitignore
一樣RUN apt-get update && apt-get install -y --no-install-recommends \
curl \
git \
nano \
openssh-server \
vim
node:latest
繼承ubuntu
繼承\
換行,增加可讀性apt-get update
apt-get install -y
寫在同一行apt-get update
誤用 cacheRUN apt-get update && apt-get install -y \
package-bar \
package-baz \
package-foo
apt-get install -y
或類似的指令-y
這種自動安裝不詢問的選項apt-get
後記得刪除多餘的檔案rm -rf /var/lib/apt/lists/*
apt-get clean
RUN apt-get update && apt-get install -y \
aufs-tools \
automake \
build-essential \
curl \
dpkg-sig \
libcap-dev \
libsqlite3-dev \
mercurial \
reprepro \
ruby1.9.1 \
ruby1.9.1-dev \
s3cmd=1.1.* \
&& rm -rf /var/lib/apt/lists/*
CMD ["apache2","-DFOREGROUND"]
MYSQL_PORT_3306_TCP
$PATH
中ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
ADD
會有一些額外的行為COPY
就不要用 ADD
ADD
會幫你解壓縮 linux 的壓縮檔gzip
, bzip2
或 xz
)zip
)cd
切換資料夾RUN cd … && do-something
.gitlab-ci.yml
FROM docker:latest
LABEL maintainer="taichunmin@gmail.com"
RUN apk --no-cache add bash git openssh py2-pip && \
pip install docker-compose
.gitlab-ci.yml
image: docker:latest
variables:
IMAGE_TAG: "registry.gitlab.com/taichunmin/docker-compose-git:latest"
services:
- docker:dind
stages:
- build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
build:
stage: build
tags:
- docker
script:
- docker build -t $IMAGE_TAG .
- docker run --rm $IMAGE_TAG docker-compose -v
- docker run --rm $IMAGE_TAG git --version
- docker push $IMAGE_TAG
代表這份 GitLab CI 要跑那些階段
stages:
- build
XXX_job: # 這行 job 的名字單純辨識用
stage: build
設定所有 job 執行前所需執行的共通指令
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
$CI_REGISTRY_USER
,$CI_REGISTRY_PASSWORD
,$CI_REGISTRY
自訂的變數,方便在 CI/CD 流程中使用
在此的 IMAGE_TAG
是 GitLab
內建的 Registry 所提供的 push 網址
variables:
IMAGE_TAG: "registry.gitlab.com/taichunmin/docker-compose-git:latest"
指定 GitLab CI Runner 必須要有什麼 tag
所以我們挑 docker image 為基準的 Runner
XXX_job:
tags:
- docker
指定 GitLab CI 要在這個 job 中執行什麼指令
只要有指令異常結束 (回傳值非 0)
則這個 job 就等同執行失敗
build:
script:
- docker build -t $IMAGE_TAG .
- docker run --rm $IMAGE_TAG docker-compose -v
- docker run --rm $IMAGE_TAG git --version
- docker push $IMAGE_TAG
.gitlab-ci.yml
後