Docker
docker 安裝卸載
環境:
cent os Linux version 3.10.0-693.2.2.el7.x86_64 ([email protected])
安裝
# step 1: 安裝必要的一些系統工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加軟件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新並安裝 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 開啓Docker服務
sudo service docker start
# 注意:
# 官方軟件源默認啓用了最新的軟件,您可以通過編輯軟件源的方式獲取各個版本的軟件包。例如官方並沒有將測試版本的軟件源置爲可用,你可以通過以下方式開啓。同理可以開啓各種測試版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 將 [docker-ce-test] 下方的 enabled=0 修改爲 enabled=1
#
# 安裝指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安裝指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
校驗
docker version
Client:
Version: 18.09.0
API version: 1.39
Go version: go1.10.4
Git commit: 4d60db4
Built: Wed Nov 7 00:48:22 2018
OS/Arch: linux/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:19:08 2018
OS/Arch: linux/amd64
Experimental: false
卸載
yum list installed | grep docker
containerd.io.x86_64 1.2.0-3.el7 @docker-ce-edge
docker-ce.x86_64 3:18.09.0-3.el7 @docker-ce-stable
docker-ce-cli.x86_64 1:18.09.0-3.el7 @docker-ce-edge
# 卸載
yum -y remove docker-engine.x86_64
# 刪除鏡像容器
rm -rf /var/lib/docker
docker mysql
查找
docker search mysql
安裝
# 創建文件夾
mkdir -p ~/mysql/data ~/mysql/logs ~/mysql/conf
# 安裝
docker run -p 3306:3306 --name mymysql -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/logs:/logs -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql
- -p 3306:3306:將容器的 3306 端口映射到主機的 3306 端口。
- -v -v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。
- -v $PWD/logs:/logs:將主機當前目錄下的 logs 目錄掛載到容器的 /logs。
- -v $PWD/data:/var/lib/mysql :將主機當前目錄下的data目錄掛載到容器的 /var/lib/mysql 。
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。
使用
docker exec -it mymysql bash
# 連接到mysql容器
mysql -u root -p
# 客戶端連接mysql
# 然後就是一些列的使用mysql了
docker redis
查找並安裝
docker search redis
mkdir -p ~/redis ~/redis/data
docker pull redis
docker run -p 6379:6379 --name myredis -v $PWD/redis/data:/data -d redis redis-server --appendonly yes
- -p 6379:6379 : 將容器的6379端口映射到主機的6379端口
- -v $PWD/data:/data : 將主機中當前目錄下的data掛載到容器的/data
- redis-server --appendonly yes : 在容器執行redis-server啓動命令,並打開redis持久化配置
使用
# 查看
docker ps -a
docker exec -it myredis redis-cli
docker mongo
查找安裝
docker search mongo
docker pull mongo
mkdir -p ~/mongo ~/mongo/db
docker run --name mymongo -p 27017:27017 -v $PWD/mongo/db:/data/db -d mongo
使用
docker exec -it mymongo mongo
使用Dockerfile 構建自己的服務鏡像 並上傳
dockerfile
# 將官方 Python 運行時用作父鏡像
FROM python:2.7-slim
# 將工作目錄設置爲 /app
WORKDIR /app
# 將當前目錄內容複製到位於 /app 中的容器中
ADD . /app
# 安裝 requirements.txt 中指定的任何所需軟件包
RUN pip install -r requirements.txt
# 使端口 80 可供此容器外的環境使用
EXPOSE 80
# 定義環境變量
ENV NAME World
# 在容器啓動時運行 app.py
CMD ["python", "app.py"]
requirements.txt
Flask
Redis
app.py
from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
try:
visits = redis.incr("counter")
except RedisError:
visits = "<i>cannot connect to Redis, counter disabled</i>"
html = "<h3>Hello {name}!</h3>" \
"<b>Hostname:</b> {hostname}<br/>" \
"<b>Visits:</b> {visits}"
return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
構建
docker build -t friendlyhello .
運行
docker run -p 4000:80 friendlyhello
此時就可以直接進行訪問4000 端口查看效果了!
docker 標記並上傳鏡像
docker tag image_name_or_id user_name/repository:tag_vserion
docker push user_name/repository:tag_vserion
docker 服務的使用
這裏使用docker-compose 來配置服務
服務是實際生產中的容器,一項服務進運行一個鏡像,但是卻會編制鏡像的運行方式端、容器實例數等。
這些僅僅編寫docker-compose.yml
即可
配置文件編寫
根據上面的已經上傳到鏡像庫的鏡像,來編寫一個.yml
docker-stack.yml
:
version: "3"
services:
web:
image: lifuchang/get-started:part1
deploy:
replicas: 5
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "80:80"
networks:
- webnet
networks:
webnet:
- 從鏡像庫中拉取我們需要的鏡像。
- 將該鏡像的五個實例作爲服務 web 運行,並將每個實例限制爲最多使用 10% 的 CPU(在所有核心中)以及 50MB RAM。
- 如果某個容器發生故障,立即重啓容器。
- 將主機上的端口 80 映射到 web 的端口 80。
- 指示 web 容器通過負載均衡的網絡 webnet 共享端口 80。(在內部,容器自身將在臨時端口發佈到 web 的端口 80。)
- 使用默認設置定義 webnet 網絡(此爲負載均衡的 overlay 網絡)。
運行服務
首先是進行初始化,docker swarm init
, 然後運行 docker stack deploy -c docker-stack.yml getstartlab_web
查看結果
docker ps
通過訪問web服務可以發現會訪問不同的容器中的服務