Docker学习-安装镜像
Docker现在已不是什么新鲜事物了,Windows Server2016已经内置了Docker,对于我来说,我只想让Docker来帮我解决运行环境的问题。
我们的产品部署起来会依赖很多的第三方产品:SqlServer、MongoDB、Redis、RabbitMQ等,各种软件等安装,数据库的还原,每次部署都会耗费大量的时间。为了能使部署更加的方便,我们的设想是这样的:
- 在Docker中安装这些工具软件
- 打包Docker,拷贝到客户环境中导入
- 在Web界面中进行简单的向导配置
本文主要介绍在Docker中安装这些工具软件。
环境
- CentOS: 7.0, CentOS是安装在Windows Server2012 Hyper-v上的虚拟机
- Docker: 1.12.6
- Mac: 10.12.5,在Mac上用iTerm通过SSH登录到CentOS中进行安装
常用Docker命令
1 | docker version:查看docker版本 |
SqlServer
1 | docker pull microsoft/mssql-server-linux |
- 使用docker pull命令拉取SqlServer进行安装,安装过程可能会有点慢,耐心等待
- 使用docker run 命令运行一个docker容器
- -e 后面的设置sa密码,网上查到的示例命令如下图:
请注意:红框部分的左右尖括号也是属于密码的一部分
参考:https://docs.microsoft.com/zh-cn/sql/linux/quickstart-install-connect-docker
MongoDB
1 | docker pull mongo:3.2 |
- -p 192.168.16.90:1433:1433:表示将容器的1433端口映射到192.168.16.90这个ip的1433端口上,192.168.16.90是CentOS的ip
- -v $PWD/mongo:/data/mongodb :将主机中当前目录下的mongo目录挂载到容器的/data/mongodb,作为mongo数据存储目录
Redis
1 | docker pull redis:3.2 |
RabbitMQ
1 | docker pull rabbitmq:management |
- pull时加上
:management
是拉取带管理界面的镜像 - 默认会创建用户名和密码都为guest的账号,登录后如下图:
所有容器都安装完成后,可以执行docker ps -a
来查看容器列表,如下图:
常见问题解决
docker run起一个容器后,status一直都是Exited
- 使用
docker logs -f 容器id
查出错误信息为Fatal error, can’t open config file ‘-p’ ,由此可以判断为权限问题 - 使用命令
chcon -Rt svirt_sandbox_file_t /data
来设置权限
思考
- 上面
docker run
命令带的参数-p中使用的是宿主机器的ip
和端口来映射容器的内部端口,如果容器打包导入到另一个环境中,怎样解决ip的映射关系? - 如果想要备份还原到容器的
SqlServer
中,怎样拷贝备份文件到容器中? - 上面安装了
SqlServer
、MongoDB
、Redis
和RabbitMQ
四个容器,是否可以导出到一个包中? - 在
CentOS
中导出的包是否可以导入到Widnwos
的Docker
中? - 在学习过程中,每次运行不成功,就执行
docker rm -f 容器id
命令将其删除,重新run一个,如果是已经正式在跑的容器,怎样修改其配置参数?