Docker
docker 安装卸载
环境:
cent os Linux version 3.10.0-693.2.2.el7.x86_64 (builder@kbuilder.dev.centos.org)
安装
# 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服务可以发现会访问不同的容器中的服务