背景
自从去年双 11,百度云 特价淘了一台服务器之后,就开始自己的瞎捣鼓之旅,各种瞎折腾,这里还留存着当时捣鼓 Docker 的文档,每次使用时都会打开看看,这次正好记录在我的博客上,方便个人查看以及帮助需要的人。
Docker 一个开源的应用容器引擎
我也是一位 Docker 新手,但是老规矩,第一步依然先简单介绍下 Docker,都是官方教程摘抄的,保证正确。在此贴上相关链接: Docker 官网 Github Docker 源码
Docker 介绍
- Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
- Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
- 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
- Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
Docker 的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
Docker 的优点
- **简化程序:**Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker 改变了虚拟化的方式,使开发者可以直接将自己的成果放入 Docker 中进行管理。方便快捷已经是 Docker 的最大优势,过去需要用数天乃至数周的 任务,在 Docker 容器的处理下,只需要数秒就能完成。
- **避免选择恐惧症:**如果你有选择恐惧症,还是资深患者。那么你可以使用 Docker 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
- **节省开支:**一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
环境配置
下面就开始个人的初步之旅,由于本人 Docker 技术比较菜,如果有错,欢迎指正。
Docker 安装
因为我安装是基于 linux 的,直接贴命令。
# 安装Docker,需要Linux内核版本 3.10及以上,可使用uname –r 查看
yum install docker
# 启动Docker
systemctl start docker
# 设置开机启动
systemctl enable docker
# 关闭Docker
systemctl stop docker
等待安装完成,至此 Docker 安装就 OK 了,是不是很简单。
Docker 常用命令
既然 Docker 安装完成了,下面先记录下 docker 的一些常用基础命令。
镜像操作
# 搜索镜像
docker search + [关键字]
# 下载镜像,tag 标签可选,是下载的镜像版本号,默认是latest
docker pull + 镜像名[:tag]
# 查看安装的所有镜像
docker images
# 删除指定的本地镜像
docker rmi + [镜像id]
说到镜像,这里就提供两个镜像市场,可以提供可用的镜像搜索,版本查看,使用方法以及使用配置等 Docker 官方 和 DaoCloud。
容器操作
# 查看运行容器
docker ps
# 查看所有容器,包含正在运行的容器和未运行的容器
docker ps -a
# 创建容器,--name 容器命名,-p 端口映射 宿主机:容器,–restart=always 设置容器跟随Docker启动,-d 需要使用的镜像,参数比较多,请百度查看详细命令,
docker run [--name + 容器名] [–restart=always] [-p hostPort:containerPort] -d + 镜像id/镜像名称[:tag]
# 启动或关闭容器
docker start/stop + 容器id/容器名
# 删除创建的容器
docker rm + 容器id/容器名
# 进入容器
docker exec –it 容器id/容器名 bash
Docker 常用软件安装
这里介绍的是我搭建服务器时安装的常用软件,主要是贴搭建时的命令和基础配置。
Mysql
-
下载 mysql 镜像,可以根据需要下载,我下载了最新版本和 5.7.24 版本镜像
# 下载mysql 最新镜像 docker pull mysql # 下载mysql5.7.24 版本镜像 docker pull mysql:5.7.24
-
创建 mysql 容器,可以创建多个 mysql 容器,容器内的 mysql 默认端口是 3306,一般不用修改这个端口,只需要对应宿主机的映射端口不同就可以了。
# 创建mysql 容器 docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=qll5201314 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci # 如果需要可以 进入mysql 容器进行mysql 配置 docker exec -it mysql01 bash
上面创建了一个容器名称为 mysql01 服务端口 3306 映射为 3306 密码为 qll5201314 的 mysql 容器。
-
如果安装是最新的 mysql 可能会导致 mysql 连接出现 1251 的错误,主要是因为新的 mysql 密码加密方式更换了。解决方法有两个,一个是下载最新的 Navicat,或者按照如下方式修改:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qll201314'; FLUSH PRIVILEGES;
Nginx
-
下载 nginx 镜像
# 下载最新nginx镜像 docker pull nginx
-
创建容器
# 创建容器 docker run --name nginx01 -p 80:80 -p 443:443 -v /home/web:/home/web -v /root/config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro -v /root/config/nginx/conf.d:/etc/nginx/conf.d:rw -v /root/config/nginx/logs:/var/log/nginx -v /root/config/ssl:/ssl:rw -d nginx
上面创建了一个容器名为 nginx01,端口映射为 容器端口 80 443 映射宿主机 80 和 443 端口的容器,其中出现了一个 -v 参数,该参数是指容器内文件地址和宿主机文件地址的映射,例如上面的
-v /root/config/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
表示容器内/etc/nginx/nginx.conf
文件指向宿主/root/config/nginx/nginx.conf
,也就是说在容器内访问 nginx.conf 其实就是访问宿主机内的 nginx.conf 文件,后面的 ro,rw 是指读写权限,可以自定义。我的创建中做了端口映射,nginx 配置文件映射,web 资源目录映射,ssl 地址映射等等。
Redis
哎呀,写的累了,这个就直接贴命令吧。
# 下载redis 最新镜像
docker pull redis
# 创建容器
docker run --name redis01 -p 6379:6379 -d --restart=always redis:latest redis-server --appendonly yes --requirepass "qll5201314"
到此一个可用的 redis 服务就创建好了,是不是很简单。
Zookeeper
Zookeeper 的搭建相对复杂一点,但是也没那么难,下面跟着步骤一步一步来
-
创建并进入容器
# 拉取镜像 docker pull zookeeper # 创建容器 docker run --name zookeeper01 –p 2281:2281 -d zookeeper # 进入容器 docker exec –it zookeeeper01 bash
-
开始进行配置
vi conf/zoo.cfg
在clientPort=2181
后面增加一行server.1=127.0.0.1:2888:3888
,然后保存; -
创建 data 目录,以及一个 myid 文件,如果已经存在则不需要创建,修改 myid 使内容为 1,
vi myid
,修改值为 1,然后保存即可; -
cat myid
显示内容为 1,做个验证; -
重启
bin/zkServer.sh restart
; -
配置防火墙等设置,让外网可以访问,设置 2181,2888,3888 三个端口,如果需要可能还要修改服务器策略,这个与云平台有关系。
firewall-cmd --zone=public --add-port=2181/tcp --permanent firewall-cmd --zone=public --add-port=2888/tcp --permanent firewall-cmd --zone=public --add-port=3888/tcp -permanent firewall-cmd --reload
总结
到此 Docker 的基本使用和部分环境的搭建就结束了,整个流程走下来肯定有很多弯弯绕啦,可是我不说,嘿嘿,到此结束,over~~~~