Docker的安装与使用
使用容器可以更快地构建和部署新应用程序。Docker容器将软件及其依赖关系整合到一个标准化的软件开发单元中,包括运行所需的一切:代码,运行时,系统工具和库。这可以保证您的应用程序始终运行相同,并使协作变得像共享容器映像一样简单。
安装Docker
目前,Docker官网上提供的docker是基于centos7
系列安装方法。如果我们想在低于3.x内核的操作系统(比如Centos6.7
)上装Docker最新版,势必要升级内核。但是想要在Centos6.7
上安装可以安装较低版本的Docker。事实上,对于内核版本要大于3.10这个要求,是从Docker1.8.2
版本开始的,Docker
之前的版本是可以运行在较低内核版本之上的,比如1.7.1
。
Centos 6 安装步骤
查看centos 内核版本(版本要求 3.10 以上)
uname -r
升级内核版本(可选,版本低于3.10)
yum update
//安装时间有点长~~ 需要耐心等待0-0
安装
yum install docker
如报错: No package docker available. Error: Nothing to do
步骤如下^^!
[root@localhost ~]# sudo yum install epel-release
# 安装docker
[root@localhost ~]# yum install docker
# 验证安装
[root@localhost ~]# docker --version
docker - version 1.5
Copyright 2003, Ben Jansens <ben@orodu.net>
卸载
- 列出你安装过的包
$ yum list installed | grep docker
yum list installed | grep docker
docker-engine.x86_64 1.7.1-1.el7 @/docker-engine-1.7.1-1.el7.x86_64.rpm123
- 删除安装包
$ sudo yum -y remove docker-engine.x86_64
启动
额!! 博主再按照教程安装时遇到启动失败的问题v_v,不过十分幸运的是博主很快就百度get了解决方案,再此感谢下Angel_Kitty解决方案提供者,下面贴出问题与方案
遇到问题
[root@localhost ~]# docker start
Segmentation Fault or Critical Error encountered. Dumping core and aborting.
解决方案
先移除docker
[root@Sakura ~]# yum remove docker
再移除docker-selinux(如果你之前有安装过的话)
[root@Sakura ~]# yum remove docker-selinux
然后修改文件
[root@Sakura ~]# vi /etc/yum.repos.d/docker.repo
直接填入如下内容
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
然后启动安装:
[root@Sakura ~]# yum install docker-engine
作为依赖被安装: docker-engine-selinux.noarch 0:1.10.2-1.el7.centos
然后启动docker服务:
[root@Sakura ~]# service docker start
返回如下状态码:
Starting cgconfig service: [ OK ]
Starting docker: [ OK ]
搞定!
设置自启动(centos 6.x环境)
编辑 /etc/rc.d/rc.local 文件
[root@localhost ~]# vim /etc/rc.d/rc.local
写入下面内容
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/etc/init.d/docker start
Centos7 安装步骤
centos 7 安装docker 相比6 来说 那可是相当简单了
详细如下:
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3: 更新并安装 Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
# Step 4: 开启Docker服务
sudo service docker start
注意:其他注意事项在下面的注释中
# 官方软件源默认启用了最新的软件,您可以通过编辑软件源的方式获取各个版本的软件包。例如官方并没有将测试版本的软件源置为可用,你可以通过以下方式开启。同理可以开启各种测试版本等。
# vim /etc/yum.repos.d/docker-ce.repo
# 将 [docker-ce-test] 下方的 enabled=0 修改为 enabled=1
#
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# Loading mirror speeds from cached hostfile
# Loaded plugins: branch, fastestmirror, langpacks
# docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
# docker-ce.x86_64 17.03.1.ce-1.el7.centos @docker-ce-stable
# docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable
# Available Packages
# Step2 : 安装指定版本的Docker-CE: (VERSION 例如上面的 17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]
# 注意:在某些版本之后,docker-ce安装出现了其他依赖包,如果安装失败的话请关注错误信息。例如 docker-ce 17.03 之后,需要先安装 docker-ce-selinux。
# yum list docker-ce-selinux- --showduplicates | sort -r
# sudo yum -y install docker-ce-selinux-[VERSION]
# 通过经典网络、VPC网络内网安装时,用以下命令替换Step 2中的命令
# 经典网络:
# sudo yum-config-manager --add-repo http://mirrors.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
# VPC网络:
# sudo yum-config-manager --add-repo http://mirrors.could.aliyuncs.com/docker-ce/linux/centos/docker-ce.repo
安装校验
root@iZbp12adskpuoxodbkqzjfZ:$ docker version
Client:
Version: 17.03.0-ce
API version: 1.26
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Server:
Version: 17.03.0-ce
API version: 1.26 (minimum version 1.12)
Go version: go1.7.5
Git commit: 3a232c8
Built: Tue Feb 28 07:52:04 2017
OS/Arch: linux/amd64
Experimental: false
Docker 使用
使用阿里云镜像加速
由于网络原因,我们在pull Image 的时候,从Docker Hub上下载会很慢。
修改文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://a3zqcvhc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# https://a3zqcvhc.mirror.aliyuncs.com 由自己去阿里云官网注册获取
https://cr.console.aliyun.com/cn-beijing/instances/mirrors
或者使用daocloud仓库
镜像操作
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 eg:docker search redis | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 | docker images | 查看所有本地镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像 |
https://hub.docker.com/
容器操作
1、搜索镜像
[root@localhost ~]# docker search tomcat
2、拉取镜像
[root@localhost ~]# docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、docker ps
查看运行中的容器
5、 停止运行中的容器
docker stop 容器的id
6、查看所有的容器
docker ps -a
7、启动容器
docker start 容器id
8、删除一个容器
docker rm 容器id
9、启动一个做了端口映射的tomcat
[root@localhost ~]# docker run -d -p 8888:8080 tomcat
-d:后台运行
-p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口
10、为了演示简单关闭了linux的防火墙
service firewalld status ;查看防火墙状态
service firewalld stop:关闭防火墙
11、查看容器的日志
docker logs container-name/container-id
#如果无法还是无法访问到tomcat 可以试试curl 127.0.0.1:port
更多命令参看 各镜像文档
安装MySQL示例
docker pull mysql
错误的启动
[root@localhost ~]# docker run --name mysql01 -d mysql
42f09819908bb72dd99ae19e792e0a5d03c48638421fa64cce5f8ba0f40f5846
mysql退出了
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
42f09819908b mysql "docker-entrypoint.sh" 34 seconds ago Exited (1) 33 seconds ago mysql01
538bde63e500 tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago compassionate_
goldstine
c4f1ac60b3fc tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago lonely_fermi
81ec743a5271 tomcat "catalina.sh run" About an hour ago Exited (143) About an hour ago sick_ramanujan
//错误日志
[root@localhost ~]# docker logs 42f09819908b
error: database is uninitialized and password option is not specified
You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD;这个三个参数必须指定一个
正确的启动
[root@localhost ~]# docker run --name mysql01 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
b874c56bec49fb43024b3805ab51e9097da779f2f572c22c695305dedd684c5f
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b874c56bec49 mysql "docker-entrypoint.sh" 4 seconds ago Up 3 seconds 3306/tcp mysql01
做了端口映射
[root@localhost ~]# docker run -p 3306:3306 --name mysql02 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
ad10e4bc5c6a0f61cbad43898de71d366117d120e39db651844c0e73863b9434
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad10e4bc5c6a mysql "docker-entrypoint.sh" 4 seconds ago Up 2 seconds 0.0.0.0:3306->3306/tcp mysql02
几个其他的高级操作
docker run --name mysql03 -v /conf/mysql:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
把主机的/conf/mysql文件夹挂载到 mysqldocker容器的/etc/mysql/conf.d文件夹里面
改mysql的配置文件就只需要把mysql配置文件放在自定义的文件夹下(/conf/mysql)
---- 分割线 ----
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
指定mysql的一些配置参数
可能出现的问题
出现问题 ,如果mysql安装版本是8.0以上的话 用navicat连接可能会报2059 错误 ,需要注意
解决方案:
主要有2种方式。
- 自定义配置文件,并 mount 到 container里。这样在MySQL启动时,会加载我们的配置文件。
- 启动MySQL容器是传入CMD,通过命令修改默认加密规则
8.0其他注意配置
进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql>FLUSH PRIVIL
更改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
更新root用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
刷新权限
flush privileges;
OK,设置完成,再次使用 Navicat 连接数据库