Docker安装及容器安装
一、Docker简单介绍
1、Docker是什么
-
Docker是基于Go语言实现的云开源项目。
-
Docker是一个开源的应用容器引擎,是容器技术的一种,采用Go编程语言编写。虽然 Docker把容器技术推向了巅峰,但其实,还有其他容器技术,比如LXC、CoreOS 的RKT等,只是Docker是最知名和运用最广泛的一个
2、Docker能做什么
- Docker的主要目标是Build,Ship and Run Any App,Anywhere,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到一次封装,到处运行。
3、Docker的 优势
-
更高效地利用系统资源
-
更快的启动时间
-
一致的运行环境
-
持续交付和部署
-
更轻松的迁移
-
更轻松的维护和拓展
二、Docker安装
1、环境要求
-
CentOS Docker 安装
Docker支持以下的CentOS版本:
CentOS 7 (64-bit) 8
CentOS 6.5 (64-bit) 或更高的版本 -
前提条件:
- 目前,CentOS 仅发行版本中的内核支持 Docker。
Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。 - Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。
- 目前,CentOS 仅发行版本中的内核支持 Docker。
2、虚拟机环境安装
- 和安装Ubuntu差不多,可以参考这篇安装Ubuntu虚拟机的文章
- http://t.csdn.cn/4xg2Q
3、Docker安装
-
通过
uname -r
命令查看当前的内核版本,是否符合Docer环境要求 -
使用root权限登录虚拟机,通过
sudo yum update
命令确保yum包是最新的 -
通过下面的命令卸载系统自带或者安装过的Docker,建议下面两个命令都用一下,卸载干净一些
-
旧版docker(docker-engine)
-
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine
-
-
新版docker(docker-ce)也叫社区版
-
yum remove docker-ce \ docker-ce-cli \ containerd
-
-
删除docker的文件
-
systemctl stop docker rm -rf /etc/systemd/system/docker.service.d rm -rf /etc/systemd/system/docker.service rm -rf /var/lib/docker rm -rf /var/run/docker rm -rf /usr/local/docker rm -rf /etc/docker rm -rf /usr/bin/docker* /usr/bin/containerd* /usr/bin/runc /usr/bin/ctr
-
-
-
安装对应依赖环境
-
sudo yum install -y yum-utils
-
-
映射仓库地址
-
源地址
-
sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
-
-
如果安装过慢的话可以用阿里的地址
-
sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
-
-
-
安装Docker CE(Docker引擎)
-
sudo yum install docker-ce docker-ce-cli containerd.io
-
-
启动Docker服务
-
sudo systemctl start docker
-
-
查看Docker版本
-
sudo docker version
-
-
设置开机自启动
-
sudo systemctl enable docker
-
-
测试Docker安装是否正常
-
sudo docker run hello-world
-
4、阿里云镜像加速配置
-
打开阿里云官网,登录
- http://dev.aliyun.com/search.html
-
点击控制台,然后点击左上角菜单栏,找到容器镜像服务
-
点开镜像工具,点击镜像加速器,找到对应的虚拟机
-
复制第一行的命令,注意不要docker目录下面,建议在root用户目录
-
sudo mkdir -p /etc/docker
-
-
然后复制第二行命令,从
EOF
开始到EOF
结束-
sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://45tfghj.mirror.aliyuncs.com"] } EOF
-
-
然后复制第三行和第四行命令
-
sudo systemctl daemon-reload sudo systemctl restart docker
-
三、容器安装(以MySQL为例)
1、拉取镜像
-
指定版本
docker pull mysql:5.7
-
不指定版本(拉取最新的)
docker pull mysql
2、运行MySQL镜像
-
运行mysql镜像命令
-
docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-
-
运行报错解决办法
-
报错提示容器mysql名字已经在使用或者被占用
- 用
docker ps
或者docker ps -a
命令查看被占用容器名字id - 用
docker rm -f id号
命令结束当前被占用容器名字id,或者换一个名字
- 用
-
报错提示端口被占用
00a68f30ec8cda6fce5614b02274adcf5f6490820918a3a7a991f7130452846b docker: Error response from daemon: driver failed programming external connectivity on endpoint mysql (40ea488b4a9220c473104083d967915b71c10e8c2c3ca5d7f85ef2c72bb43207): Error starting userland proxy: listen tcp4 0.0.0.0:3306: bind: address already in use.
- 用
netstat -tanlp
命令查看当前被占用端口号pid - 用
kill 占用端口进程的PID
命令杀死被占用端口号pid或者更换端口号 - 3306:3306,是把后面的端口号映射给前面的端口号
- 用
-
-
注意关闭防火墙
-
关闭防火墙命令
// 临时关闭防火墙 systemctl stop firewalld // 禁止开机启动防火墙 systemctl disable firewalld
3、远程连接配置
-
成功启动MySQL容器后,切换到mysql的conf目录下面
cd mydata/mysql/conf/
-
创建my.conf文件
vim my.conf
-
写入以下配置信息并保存
[client] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqld] init_connect="SET collation_connection = utf8_unicode_ci" init_connect="SET NAMES utf8" character-set-server=utf8 collation-server=utf8_unicode_ci skip-character-set-client-handshake skip-name-resolve
-
然后重启容器
docker restart 容器ID
-
其他的容器安装和这个都差不多,运行时出错的解决办法也基本一样,就不多多赘述了
"
init_connect=“SET NAMES utf8”
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
```
-
然后重启容器
docker restart 容器ID
其他的容器安装和这个都差不多,运行时出错的解决办法也基本一样,就不多多赘述了