# 以守護進程模式啓動Docker sudo service docker start # 設置開機自動啓動Docker systemctl start docker # 查看版本 docker version
# 拉取鏡像 docker pull name:tag docker pull nginx docker pull busybox docker pull python:2.7 # 查看鏡像 docker images # 刪除鏡像 docker rmi id # 查看容器 運行中 docker ps docker ps -a # 查看網絡 (namespace,veth pair) docker network ls { bridge, host, none, overlay}
# docker run 啓動容器 -d 後臺運行 --name 指定容器名稱 -p 80:80 端口映射 -v /root:/root 目錄映射 --link 連接容器 --nwtwork 指定網絡 -c 添加運行時cmd 命令 -e 添加環境變量 # docker exec name -it -it 交互模式進入容器 -i --interactive -t --tty
-- 啓動nginx容器 docker run -it --name web-n1 -p 80:80 -v /var/www/html:/usr/share/nginx/html -d nginx:alpine
-- 啓動redis docker run -d --name rds -p 6379:6379 redis
-- 連接容器 docker run -d --link rds --name app-1 -e REDIS_HOST=rds app:1.0
dokcerfile構建: FROM : 來源基礎鏡像 (scratch -> 全部鏡像原始鏡像) MAINTAINER : 做者<郵箱> RUN : 容器構建須要執行的命令 (建立用戶組 , 建立文件夾 , 安裝包 等) RUN yum -y install vim RUN yum -y install net-tools RUN mkdir /var/wwwroot 建議以下使用 , 使用 & 鏈接 : RUN yum -y install vim \ && yum -y install net-tools \ && mkdir /var/wwwroot EXPOSE : 暴露的端口號 WORKDIR : 指定在建立而且進去容器終端後的工做目錄(無指定到 / 根目錄) ENV : 構建鏡像過程當中設置的環境變量 ENV MY_PATH /var/wwwroot WORKDIR $MY_PATH ADD : 將宿主機目錄下的文件拷貝進鏡像 , 而且會自動處理url和解壓tar壓縮包 COPY : 相似add , 拷貝到鏡像, 沒有處理功能 VALUME : 容器數據卷, 用於數據持久化 , 容器中建立指定的目錄 CMD : 指定容器啓動時運行的命令 ( 多個命令只有最後一個生效 , 會被docker run以後的參數覆蓋) ENTRYPOINT : 與cmd功能同樣 , 會在docker run以後的參數追加命令 ONBUILD : 當構建一個被繼承的dockerfile時運行命令,父鏡像在被子鏡像繼承後父鏡像的onbuild被觸發
FROM python:3.7 COPY . /var/www/app WORKDIR /var/www/app RUN pip install flask redis EXPOSE 80 CMD [ "python","app.py" ]
from flask import Flask from redis import Redis import os import socket app = Flask(__name__) redis = Redis(host=os.environ.get('REDIS_HOST','127.0.0.1'),prot=6379) @app.route("/") def incr(): redis.incr('like') return 'current like = %s, current host = %s \n' % (redis.get('like'),socket.gethostname()) if __name__ == "__main__": app.run(host="0.0.0.0",port=80,debug=True)
# 使用dockerfile構建鏡像 docker build -t name:tag -f template . docker build -t app-1:1.0 . # 運行構建鏡像 docker run -d --link rds-1 --name app-5 -p 80:80 -e REDIS_HOST=rds-1 app-1:3.0 # 進入容器 docker exec -it app-5 bash curl 0.0.0.0:80 --> current like = b'1', current host = bc33562a73ea --> current like = b'2', current host = bc33562a73ea --> current like = b'3', current host = bc33562a73ea
etcd + docker
html
overlay network
python
/usr/bin/dockerd -H tcp://0.0.0.02375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.xxx.xx:2379 --cluster-advertise=192.168.xxx.xx1:2375& /usr/bin/dockerd -H tcp://0.0.0.02375 -H unix:///var/run/docker.sock --cluster-store=etcd://192.168.xxx.xx:2379 --cluster-advertise=192.168.xxx.xx2:2375&
docker-compose.yml
version: "3" services: rds: image: redis app: build: context: . dockerfile: Dockerfile ports: - 80:80 environment: REDIS_HOST: rds
scale、load balance
--scale
linux
docker-compose up --scale app=3 -d
nginx
version: '3' services: rds: image: redis app: build: context: . dockerfile: Dockerfile # ports: # - 80:80 environment: REDIS_HOST: rds lib: image: dockercloud/haproxy links: - app ports: - 80:80 volumes: - /var/run/docker.sock:/var/run/docker.sock
command
cd ~/path docker-compose up -d docker-compose stop docker-compose restart docker-compose down docker-compose build
cluster
k8s, swarm