docker 之安裝卸載、mysql、redis、mongo、服務的運行

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服務可以發現會訪問不同的容器中的服務

擴展應用只需要修改配置文件重新部署即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章