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服务可以发现会访问不同的容器中的服务

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

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