一、Docker
1、docker概念
Docker是一个能够把开发的应用程序自动部署到容器的开源引擎。Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口,应用程序在这个虚拟容器里运行。
docker中的三个基本概念:
- 镜像
一个特殊的文件系统,够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。
2. 容器
容器和镜像类似,容器就相当于镜像的一个实现类,是一个可以被操作的镜像。
3. 仓库
存放镜像的地方,可以从仓库中拉去镜像,也可以将构建好的镜像传到仓库中,供其他服务器使用该镜像。
2、docker的基本命令:
安装docker
yum install -y docker
查看版本
docker -v
启动
systemctl start docker
重启docker服务
systemctl restart docker
service docker restart
关闭docker
service docker stop
systemctl stop docker
搜寻镜像
docker search NAME
从仓库拉取镜像
docker pull CONTAINER
查看下载下来的镜像
docker images
查看镜像详细信息
docker inspect ID
创建镜像
1)基于已有镜像的容器创建
docker commit [OPTIONS] 容器名/容器ID
-a "" 作者信息
-m "" 提交信息
-p "" 提交时暂停容器运行
2)基于本地模板导入
cat XXX.tar.gz |docker import - 容器名
3)基于Dockerfile创建
存出和载入镜像
docker save -o XXX.tar 容器名 docker load --input XXX.tar
上传镜像
docker push NAME[:TAG]
删除某个镜像
docker rmi imageid
查看正在运行的容器
docker ps
查看所有的容器
docker ps -a
删除一个容器
docker rm ID
启动容器
docker start TED
停止容器
docker stop TED
查看日志
docker logs ID
新建容器
docker create it 容器名:版本号
新建并启动容器
docker run ... -d 表示再后台运行
进入容器
docker exec -it 容器ID bash
docker attach 容器ID
退出容器
exit
导入和导出容器
docker export CONTAINER > test.tar
cat test.tar | docker import -CONTAINER
在容器内创建数据卷
docker run -d -P --name rongqiname -v /webapp centos
挂载一个主机目录作位数据卷,将/src/webapp目录加载到容器的/opt/webapp目录
docker run -d -P --name web -v /src/webapp:/opt/webapp centos
创建dbdata容器,并在其中创建一个数据卷挂载到/dbdata目录下
docker run -it -v /dbdata --name dbdata ubuntu
创建容器db1并将dbdata数据卷容器挂载到db1和db2,这样/dbdata目录下的内容在db1和db2中通用
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
备份dbdata数据卷容器内的数据卷
Dockerfile基本结构
1.指定基础镜像
from ubuntu
2.维护者信息
maintainer docker_user docker_user@email.com
3.镜像的操作指令
4.容器启动执行命令
3、docker-compose的基本命令:
安装docker-compose
curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
安装完成授权
chmod +x /usr/local/bin/docker-compose
检查是否安装成功
docker-compose --version
docker-compose XXX ,XXX可以是以下的参数
up
启动所有在Compose问中定义的容器,并且把它们的日志信息汇集在一起。通常会添加-d参数(在up后面),让容器在后台执行
start
启动指定的已经存在的容器
build
重新建造由Dockerfile构建的镜像。
ps
获取由Compose管理的容器的状态信息
run
启动一个容器,并允许一个一次性的命令。被连接的容器会同时启动,除非用了 --no-deps参数。
logs
汇集由Compose管理的容器的日志,并以彩色输出。
stop
停止容器,但不会删除它们
rm
删除已停止的容器。不要忘记使用-v参数来删除任何由Docker管理的数据卷
使用docker-compose启动zookeeper和kafka为例:
需要自定义docker-compose.yaml,在docker-compose.yaml目录下执行docker-compose up -d,即创建并启动好了zookeeper和kafka容器。
version: "3"
services:
zookeeper-0:
container_name: zookeeper-0
image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/zookeeper:3.4.10
hostname: zookeeper-0
environment:
- ZK_REPLICAS=1
- ZK_HEAP_SIZE=2G
- ZK_TICK_TIME=2000
- ZK_INIT_LIMIT=10
- ZK_SYNC_LIMIT=5
- ZK_MAX_CLIENT_CNXNS=60
- ZK_SNAP_RETAIN_COUNT=3
- ZK_PURGE_INTERVAL=1
- ZK_LOG_LEVEL=INFO
- ZK_CLIENT_PORT=2181
- ZK_SERVER_PORT=2888
- ZK_ELECTION_PORT=3888
ports:
- "2181:2181"
- "2888:2888"
- "3888:3888"
command:
- sh
- -c
- zkGenConfig.sh && exec zkServer.sh start-foreground
volumes:
- "./kafka/zk:/var/lib/zookeeper"
kafka-0:
container_name: kafka-0
image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/kafka:1.0.0
hostname: 127.0.0.1
depends_on:
- zookeeper-0
links:
- zookeeper-0
ports:
- "9092:9092"
command:
- sh
- -c
- "/opt/kafka/bin/kafka-server-start.sh config/server.properties \
--override zookeeper.connect=zookeeper-0:2181 \
#--override log.dirs=/opt/kafka/data/logs \
--override broker.id=0 "
volumes:
- "./kafka/kafka:/opt/kafka/data"
# mysql:
# container_name: mysql
# hostname: mysql
# image: registry.cn-hangzhou.aliyuncs.com/choerodon-tools/mysql:5.7.17
# ports:
# - "3306:3306"
# environment:
# MYSQL_ROOT_PASSWORD: root
# volumes:
# - ./mysql/mysql_data:/var/lib/mysql
# - ./mysql/mysql_db.cnf:/etc/mysql/conf.d/mysql_db.cnf