Shawn's Blog

蒸汽兔

Docker的安装与使用

字数:1311 字 阅读时长:约 7 分钟 阅读

使用容器可以更快地构建和部署新应用程序。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>

卸载

  1. 列出你安装过的包
$ 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
  1. 删除安装包
$ 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种方式。

  1. 自定义配置文件,并 mount 到 container里。这样在MySQL启动时,会加载我们的配置文件。
  2. 启动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 连接数据库

相关资料

docker官方文档

参考博客-鸭子船长

阿里云相关文档

mysql问题解决


© Shawn Jim. All rights reserved. 本站总访问量 次, 访客数 人次.