最简单实用的docker专题


一:docker的安装

1.centos7安装docker

1.1 移除旧版本:
yum remove docker \
   docker-client \
   docker-client-latest \
   docker-common \
   docker-latest \
   docker-latest-logrotate \
   docker-logrotate \
   docker-selinux \
   docker-engine-selinux \
   docker-engine
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm -rf /var/run/docker
rm -rf /usr/local/docker
rm -rf /etc/docker
1.2 安装一些必要的系统工具:

yum -y install yum-utils device-mapper-persistent-data lvm2

1.3 添加软件源信息:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

1.4 安装 Docker-ce:

yum -y install docker-ce

1.centos8安装docker

Docker 软件包已经包括在默认的 CentOS-Extras 软件源里。因此想要安装 docker,只需要运行下面的 yum 命令

$ sudo yum install docker #centos8的安装

2.启动服务

通过systemctl启动服务

systemctl start docker

3.查看安装版本

这样子就安装成功了,启动服务以后可以使用docker version查看一下当前的版本。

docker version

二:docker的三个基本概念

镜像(Image)、容器(Container)与仓库(Repository),这三个是Docker中最基本也是最核心的概念,对这三个概念的掌握与理解,是学习Docker的关键。

1 镜像(Image)

Docker镜像是一个特殊的文件系统,提供容器运行时所需的程序、库、资源、配置等文件,另外还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
镜像是一个静态的概念,不包含任何动态数据,其内容在构建之后也不会被改变。

1.1 查看镜像列表

列出所有镜像如下操作:
docker images
由于我已经拉取了镜像,所以会输出下面的内容:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/busybox   latest              6d5fcfe5ff17        7 weeks ago         1.22 MB
1.2 从仓库拉取镜像

我们使用docker image pull命令也是一样的。一般默认是从Docker Hub上拉取镜像的,Docker Hub是Docker官方提供的镜像仓库服务(Docker Registry),有大量官方或第三方镜像供我们使用,比如我们可以在命令行中输入下面的命令直接拉取一个CentOS镜像:docker pull centos
docker pull命令的完整写法如下:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
我们上面使用CentOS,那是因为省略作者名,则作者名library,表示Docker官方的镜像,所以上面的命令等同于:

docker pull library/centos:latest
因此,如果拉取非官方的第三方镜像,则需要指定完整仓库名,如下:

docker pull mysql/mysql-server:latest
下载完成后,该镜像被默认保存到 /var/lib/docker 目录下。

1.3 运行镜像

使用docker run命令,可以通过镜像创建一个容器,如下:

docker run -it centos /bin/bash

1.4 删除镜像

当本地有些镜像我们不需要时,那我们也可以删除该镜像,以节省存储空间,不过要注意,如果有使用该镜像创建的容器未删除,则不允许删除镜像。

docker rmi image_name/image_id

2 容器(Container)

Docker的镜像是用于生成容器的模板,镜像分层的,镜像与容器的关系,就是面向对象编程中类与对象的关系,我们定好每一个类,然后使用类创建对象,对应到Docker的使用上,则是构建好每一个镜像,然后使用镜像创建我们需要的容器。

2.1 启动和停止容器

启动容器有两种方式,一种是我们前面已经介绍过的,使用docker run命令通过镜像创建一个全新的容器,如下:

docker run -it hello-world
docker run -d 镜像名 :后台运行容器,守护进程
参数: -it通常的解释是: -t让docker分配一个伪终端并绑定到容器的标准输入上, -i则让容器的标准输入保持打开.
另外一种启动容器的方式就是启动一个已经停止运行的容器:

#container_id表示容器的id
docker start container_id

要停止正在运行的容器可以使用docker container stop或docker stop命令,如下:

#container_id表示容器的id
docker stop container_id

强制停止容器

docker kill 容器ID或容器名

2.2 查看所有容器

如果要查看本地所有的容器,可以使用docker ps -a命令:

docker ps [-a]

2.3 删除容器

我们也可以使用docker container rm命令,或简洁的写法docker rm命令来删除容器,不过不允许删除正在运行的容器,因此如果要删除的话,就必须先停止容器。
container_id表示容器id,通过docker ps可以看到容器id

$ docker rm container_id
当我们需要批量删除所有容器,可以用下面的命令:

docker rm $(docker ps -q)
删除所有退出的容器

docker container prune

2.4 进入容器

进入一个已启动的容器,container_id表示容器的id,command表示Linux命令,如/bin/bash

docker exec -it container_id command

2.5 退出容器

退出容器,两种方式:
1.容器停止退出,命令:exit
2.容器不停止退出,命令:ctrl+P+Q

2.6 docker拷贝文件

1.拷贝文件到docker中
docker cp /opt/test.js dockername:/usr/local/tomcat/webapps/
2.拷贝docker中文件到本地
docker cp dockername:/opt/test.js /usr/local/tomcat/webapps/

3.3 仓库(Repository)

在前面的例子中,我们使用两种方式构建镜像,构建完成之后,可以在本地运行镜像,生成容器,但如果在更多的服务器运行镜像呢?很明显,这时候我们需要一个可以让我们集中存储和分发镜像的服务,就像Github可以让我们自己存储和分发代码一样。
Docker Hub就是Docker提供用于存储和分布镜像的官方Docker Registry,也是默认的Registry,其网址为https://hub.docker.com,前面我们使用docker pull命令便从Docker Hub上拉取镜像。
Docker Hub有很多官方或其他开发提供的高质量镜像供我们使用,当然,如果要将我们自己构建的镜像上传到Docker Hub上,我们需要在Docker Hub上注册一个账号,然后把自己在本地构建的镜像发送到Docker Hub的仓库当中,Docker Registry包含很多个仓库,每个仓库对应多个标签,不同标签对应一个软件的不同版本。

五、docker镜像制作

创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个。本文只讲解从 Docker Hub 获取已有镜像并更新的情形

1.创建镜像

创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新。

2.修改已有镜像

2.1 先使用下载的镜像启动容器。
$ docker run -it centos:centos7
[root@7f75ff963d22 /]#

2.2 在容器中安装应用。

#yum install httpd -y

2.3 在容器中配置应用

apache在容器中正常安装成功了,需要修改配置文件,可通过常规的centos linux命令修改其配置文件。例如:
查找apache配置文件位置:find / -type f -name httpd.conf
编辑apache配置文件: vi httpd.conf
启动apche程序:systemctl start httpd
应用配置结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了。

2.4 将容器创建为镜像

使用 docker commit 命令来提交更新后的副本,即可将该容易修改为镜像。

$docker commit -m "yum install httpd" -a "centos-apache" 7f75ff963d22 qianli2424/centos:v1
其中,-m 来指定提交的说明信息;-a 可以指定更新的用户信息;7f75ff963d22是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息。
使用 docker images 来查看新创建的镜像

3 push到docker库

镜像构建成功后,只有将镜像推送到Docker Hub上去,我们才能够docker pull这个镜像。

3.1 Docker hub注册用户

到官网注册账号:https://hub.docker.com/

3.2 在本地Linux登录docker

使用docker login进行登录

3.3 推送镜像到Docker Hub

通过push命令推送镜像:docker push [镜像名]
如有需要,可使用docker pull docker.io/qianli2424/centos:v1下载该镜像

六、docker实例

1.docker安装mysql

MySQL 是世界上最受欢迎的开源数据库。凭借其可靠性、易用性和性能,MySQL 已成为 Web 应用程序的数据库优先选择。

1.1 查看可用的 MySQL 版本

访问 MySQL 镜像库地址:https://hub.docker.com/_/mysql?tab=tags 。可以通过 Sort by 查看其他版本的 MySQL,默认是最新版本 mysql:latest 。

1.2 拉取 MySQL 镜像

这里我们拉取官方的5.7版本的镜像:

docker pull mysql:5.7

1.3 运行容器

安装完成后,我们可以使用以下命令来运行 mysql 容器:

docker run -itd --name mysql57 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

2.Docker 安装 LAMP

2.1 拉取docker镜像

docker pull qianli2424/centos:v5

2.2 运行容器

运行容器的操作如下:
docker run --privileged -it -p 8081:80 -p 3307:3306 -d qianli2424/centos:v5 /usr/sbin/init
注意2点:1. --privileged 参数必须加,2. /usr/sbin/init作为容器的启动命令
参数说明:
--name:设置docker容器的名称
-p:设置主机映射容器的端口
-v:设置主机映射容器的目录

2.3 容器内部设置

这是一个自己配置的容器,容器中包含了Apache、PHP和Mysql三个应用,需要手动启动Apache和Mysql,其运行命令为:

docker exec -it 容器ID bash    #须进入容器
systemct start httpd            #启动apache
systemct start mysqld            #启动mysql