Docker install
一、 Docker 安装要求
- 64位操作系统
- 最好是3.8以上内核
二、 Cent OS 6.5 默认内核为 2.6
1. 升级内核
a) 先执行以下命令
rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
rpm -ivh http://www.elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
yum -y --enablerepo=elrepo-kernel install kernel-lt
b) 修改配置文件
vim /etc/grub.conf // 将 default=1 修改为 default=0
c) reboot 重启电脑
重启后如果不出意外的话,再次查看内核,您的 CentOS 内核将会显示为 3.10
恭喜您!下面我们就一起来安装 Docker 了
附: uname -r 可以查看当前系统内核版本
三、安装 Docker
1. 通过以下命令即可安装 Docker 软件
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install docker-io
2. 通过以下命令查看 Docker 是否安装成功
docker version // 若输出了 Docker 的版本号,则说明安装成功了
3. 可通过以下命令启动 Docker 服务
service docker start // Docker 服务启动完毕,我们就可以使用 Docker 了
4. 好像丢掉了一句,到后边会报错
yum upgrade device-mapper-libs
四、下载 Docker 镜像
1. 官网网址: https://www.docker.com/
五、Docker的使用
1. 测试镜像
docker run -i -t centos:6 /bin/bash
常用 docker 命令
1、docker -h 帮助
2、获取镜像
sudo docker pull NAME[:TAG]
sudo docker pull centos:latest
3、启动Container盒子
sudo docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
sudo docker run -t -i contos /bin/bash
4、查看镜像列表,列出本地的所有images
sudo docker images [OPTIONS] [NAME]
sudo docker images centos
5、查看容器列表,可看到我们创建过的所有container
sudo docker ps [OPTIONS]
sudo docker ps -a
6、删除镜像,从本地删除一个已经下载的镜像
sudo docker rmi IMAGE [IMAGE...]
sudo docker rmi centos:latest
7、移除一个或多个容器实例
sudo docker rm [OPTIONS] CONTAINER [CONTAINER...]
8、移除所有未运行的容器
sudo docker rm sudo docker ps -aq
9、停止一个正在运行的容器
sudo docker kill [OPTIONS] CONTAINER [CONTAINNER...]
sudo docker kill 026e
10、重启一个正在运行的容器
sudo docker restart [OPTIONS] contains[CONTAINER]
sudo docker restart 026e
11、停止一个已经停止的容器
sudo docker start [OPTIONS] CONTAINER [CONTAINER..]
sudo docker start 026e
12、进去一个已经运行的容器
sudo docker exec -it /bin/bash
13、为镜像添加 Tag
sudo docker tag centos:7 172.16.166.130/fsdn/centos:7
14、创建 docker 容器, 但是不运行
sudo docker create --name maven csphere/mave:3.3.3
15、复制 docker 中的内容
sudo docker cp maven:/hello/target/hello.war .
#
备注:
curl -SsL -o /tmp/csphere-install.sh https://csphere.cn/static/csphere-install-v2.sh
sudo env ROLE=controller CSPHERE_VERSION=1.0.1 /bin/sh /tmp/csphere-install.sh
—————————————
希云教程笔记
第一讲 Docker 实战之入门以及 Dockerfile
$ docker build -t registry_url/namespace/csphere/centos:7.1 ./path # 7.1为标签,如果不指定标签默认添加 latest
$ supervisorctl # 查看当前容器运行状态
ENTRYPOINT 与 CMD 的区别
- ENTRYPOINT[“executable”,”param1”,”param2”](the preferred exec form)
- ENTRYPOINT command param1 param2(shell form)
docker run -it –entrypoint= 覆盖 Dockerfile ENTRYPOINT []
CMD[“executable”,”param1”,”param2”]
- CMD[“param1”,”param2”] (为 ENTRYPOINT 提供默认参数值)
- CMD command param1 param2
- 区别一
CMD命令会被 docker run 后边的指令所覆盖掉, 而 ENTRYPOINT 不会。
ENTRYPOINT 会被 docker run -it –entrypoint= 覆盖
第二讲 Docker 实战之 Registry 以及持续集成
1. Registry
Docker镜像命名规则
registry_url/csphere/csphere:latest
本机地址 + 端口号/目录/镜像名称:版本号
# 首先 pull 一个registry 镜像到本地
docker run -d -p 5000:5000 --name registry registry:0.9.1 # registry 默认端口为 5000
# 在这里需要配置一个csphere
docker tag centos:6 172.16.166.130:5000/fsdn/centos:6
docker push 172.16.166.130:5000/fsdn/centos:6
2. 持续集成 – jenkins
docker run -d -p 8080:8080 --name jenkins \
-v /usr/bin/docker:/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/maven-tar:/root csphere/jenkins:1.609
# 注: /usr/bin/docker 的二进制文件 第三个 -v 可选
docker exec -it jenins /bin/bash
# 到 jenkins 中添加构建步骤 Execute shell
docker build -t fsdn/centos:6 $WORKSPACE/php-fpm # $WORKSPACE/php-fpm 是 Dockerfile 所在目录
java项目
手动部分
# 构建 Maven 镜像
cp /apache-maven-3.3.3-bin.tar.gz ./maven # 复制 maven 文件到 Docker file 文件目录下,也可以在 Dockerfile 中指定地址下载
docker build -t csphere/maven:3.3.3 .
docker create --name maven csphere/mave:3.3.3
# 复制源代码,并且构建镜像
docker cp maven:/hello/target/hello.war .
docker build -t csphere/hello:1.0 .
# 启动 db 容器
docker run -d -p 3306:3306 --name mysql csphere/mysql:5.5
# -e DB_HOST 域名
docker run -d -p 80:8080 --name hello csphere/hello:1.0
# 此时, 外网就可以访问项目了
自动部分
# 配置 jenkins
# 1. 构建触发器 (目的: 监听代码仓库代码变化)
# 身份验证令牌 自己起名字 eg: java-token
# 2. 增加 构建 shell
REGISTRY_URL=172.16.166.130:5000
# 构建 Maven 镜像
cp /root/apache-maven-3.3.3-bin.tar.gz $WORKSPACE/maven
docker build -t csphere/maven:3.3.3 $WORKSPACE/maven
if docker ps -a | grep -i maven ; then
docker rm -f maven
fi
docker create --name maven csphere/maven:3.3.3
# 复制源代码,并且构建镜像, 并且将该镜像 push 到 registry 库中
docker cp maven:/hello/target/hello.war $WORKSPACE/hello
docker build -t $REGISTRY_URL/csphere/hello:1.0 $WORKSPACE/hello
docker push $REGISTRY_URL/csphere/hello:1.0
# 运行容器
if docker ps -a | grep -i hello; then
docker rm -f hello
fi
docker run -d -p 80:8080 --name hello $REGISTRY_URL/csphere/hello:1.0
# 此时, 等待 jenkins 编译完成之后, 外网就可以访问项目了
第三讲 Docker 实战之监控报警以及日志管理
1. 监控报警
# 启动数据库容器
docker run -d -p 3306:3306 --name mysql csphere/mysql:5.5
# 创建 WordPress 容器
docker run -d -p 80:80 --name wordpress \
-e WORDPRESS_DB_HOST=172.16.166.130 # 传入环境变量 \
-e WORDPRESS_DB_USER=root # 传入环境变量 \
-e WORDPRESS_DB_PASSWORD=3258 # 传入环境变量
2. 日志管理
# 方案
# Logstash 管理日志和事件
# Elasticsearch 分布式的搜索分析系统
# Kibana 可视化日志和数据系统
# Logstash-forwarder 转发日志 --> Logstash
# 参考: http://github.com/spujadas/elk-docker
第四讲 Docker 实战之网络管理
docker 网络模式
NAT (Network Address Translation)
iptables -t nat -L -n # 查看iptables nat 规则
route -n # 查看路由表Host
Other container
None
Overlay
1. 利用 consul 集群
2. docker service test-bright
第五讲 Docker 实战之持续部署以及弹性伸缩
1. Docker compose 一键发布应用
# 服务编排工具
# 结合 Swarm, 分布式部署应用
# 动态改变应用, 扩展
# 重要文件 docker-compose.yml
docker-compose up -d # 执行此命令进行发布
2. Docker Swarm 集群管理
# Swarm 服务发现
# Swarm scheduler (Swarm 调度)
1. Filter
# 1. Constraint(约束)
# 2. Affinity(亲和性)
# 3. Port(端口)
# 4. Dependency(依赖)
# 5. Health(健康)
2. Weigh – 权重
# 1. Spread(最少)
# 2. Binpack(最多)
# 3. Random(随机)
3. 创建 Swarm 集群
# 1. 创建集群token(discovery service)
docker create csphere/mysql:5.5 # 创建一个容器ID
# 定义 Docker1 主机所属角色
docker run -d -p 2376:2375 swarm manage token://xxxx
# 2. 加入 Swarm 集群
docker run -d swarm join --addr=<node_ip>:<port> token://xxxx
docker -H <mater_ip>:2376 info
# 3. 在 master 节点操作 slaver 节点
docker -H <slaver_ip>:2376 run -it --name busybox \
-e constraint:label_name==doker2 busybox # constraint 为调度策略
第六讲 Docker 实战之存储
Docker 支持的 graphdriver
aufs(ubantu) – 联合文件系统
btrfs(CoreOS)
devicemapper(RedHat, CentOS)
overlayfs(CoreOS)