一、Docker介绍

        1.1 Docker概念

                Docker 是一个开源的应用容器引擎,是C/S架构(客户端-服务端),基于 Go 语言开发。Docker 是一个容器化平台,用于将应用程序及其所有依赖项打包到一个标准化的、轻量级的、可移植的容器中。容器可以在任何环境中(开发、测试、生产)一致地运行。(即一次封装,到处运行)。

        1.2 Docker优势

                一致的运行环境

                更快速的启动时间

                隔离性(避免公共服务器,从而受到其他用户影响)

                弹性伸缩,快速扩展

                迁移方便

                持续交付和部署(可以通过定制应用镜像来实现持续集成、交付、部署

        1.3 与虚拟机比较

                空间小、运行速度快、用户体验高

        1.4 Docker组件

二、Docker安装及卸载

        2.1 安装(mac版本)

                官网:https://www.docker.com/get-started/

        2.2 配置加速镜像
"registry-mirrors": ["https://docker.1ms.run"]

        2.3 卸载(关闭docker后通过终端命令彻底卸载)
        2.4 安装(Linux)

1.确定你是CentOS7及以上版本

        cat /etc/redhat-release

2.yum安装gcc相关(已安装则跳过)

        yum -y install gcc

        yum -y install gcc-c++

3.安装需要的软件包

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

4.设置镜像仓库(使用阿里的,快)

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

5.更新yum软件包索引

        yum makecache fast

6.安装DOCKER CE(社区版)(DOCKER EE企业版收费)

        yum -y install docker-ce

7.启动docker

        systemctl start docker

8.配置加速镜像

        mkdir -p /etc/docker

        vim  /etc/docker/daemon.json

       

        {

                "registry-mirrors": ["https://8y2y8njn.mirror.aliyuncs.comhttps://docker.1ms.runhttps://8y2y8njn.mirror.aliyuncs.com"]

        }

9.重启docker

        systemctl restart docker

10.测试

    • 检查版本:docker version
    • 下载并运行HelloWorld:docker run hello-world

三、常用命令

        3.1 docker基础命令

                目前本地docker均有客户端操作界面,但是主机操作一般使用命令。

启动docker:

systemctl start docker

停止docker:

systemctl stop docker

重启docker:

systemctl restart docker

查看docker状态:

systemctl status docker

开机启动:

systemctl enable docker

查看docker概要信息:

docker info

查看docker帮助文档:

docker --help

        3.2 指令介绍

cp

本地文件系统(OS操作系统|宿主机)和容器之间进行文件或者文件夹拷贝

exec

登录一个容器,使用命令行操作正在运行的容器。

images

镜像的集合查询。

ps

容器列表

pull

下载镜像

restart

重启一个或多个容器

rm

删除一个或多个容器

rmi

删除一个或多个镜像

run

创建一个容器,并运行起来

save

导出镜像到一个文件(tar)中

search

搜索镜像(从Docker Hub)

start

启动一个或多个已经停止的容器

stop

停止一个或多个正在运行的容器

        3.3 镜像命令

                docker images【查看已有镜像】

                docker search 镜像名称【搜索镜像】

                docker pull 镜像名称【下载镜像】

                docker rmi 镜像ID/镜像名称【删除镜像】

                docker rmi  -f 镜像ID/镜像名称【强制删除镜像(包含正在运行的镜像)】

        docker rmi -f 镜像名1:TAG 镜像名2:TAG【删除多个镜像】

        docker rmi -f $(docker images -qa)【删除所有镜像】

        docker commit【生成镜像】

        docker save【备份镜像为tar文件】

        docker load【将tar文件恢复为镜像】

3.4 容器命令
                3.4.1 基础命令

                docker ps【查看正在运行的容器】

                docker ps –a【查看所有容器】

                docker ps –l【查看最后一次运行的容器】

                docker ps -f status=exited【查看停止的容器】

                docker inspect 容器名称/容器ID【查看容器IP地址】

                        docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)【精确查找容器IP地址】

                exit【退出容器】

                docker exec -it 容器名 /bin/bash【进入指定容器】

                docker rm 容器名称/容器ID【删除已关闭的容器】

                docker start 容器名称【打开容器】

                docker stop 容器名称【停止容器】

                docker rm -f 容器名称/容器ID【强制删除容器】

                docker run -**********【创建容器】

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

--name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

                3.4.2 创建交互式容器

                        docker run -it --name=容器名称 镜像名称:标签 /bin/bash

                        例:docker run -it --name=myredis redis:latest /bin/bash

                        查看容器可用:docker ps、退出容器可用:exit。

                        注意:这里exit后,容器也会退出关闭,但不会删除。

                3.4.3 创建后台守护式容器

                        docker run -id --name=容器名称 镜像名称:标签

                        例:docker run -id --name=myredis2 redis:latest

                        进入容器可用:docker exec -it myredis /bin/bash、退出容器可用:exit、关闭容器可用:docker stop myredis、打开容器可用:docker start myredis

                        注意:这里exit后,容器不会退出,因为是后台容器。退出关闭容器需要用docker stop。

                3.4.4 文件拷贝(在需拷贝的文件目录下执行)

                        主机 -> 容器:

                                docker cp 需要拷贝的文件或目录 容器名称:容器目录

                                例:docker cp demo.png myredis2:/usr/local/

                        容器 -> 主机:

                                docker cp 容器名称:容器目录 需要拷贝的文件或目录

                                例:docker cp myredis2:/usr/local/demo.png ./

                3.4.5 目录映射(将主机和容器目录进行映射,任意一方目录下有变动,另一方也会随之变动)

                        docker run -id --name=容器的名字 -v 主机目录:容器目录 镜像名称:标签

                        例:docker run -id --name=myredis2 -v /usr/local/myhtml:/usr/local/myhtml redis:latest

       

四、容器部署(用户无法直接访问容器端口,所以通过映射到宿主机,用户通过访问宿主机的映射端口从而间接访问容器的相关端口)         

        4.1 mysql部署
                1.拉取mysql

docker pull mysql

                2.创建容器

# docker run -id --name=容器名字 -p 宿主机端口:容器端口 -e  MYSQL_ROOT_PASSWORD=mysql密码 镜像名称

docker run -id --name=mymysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

-p 代表端口映射,格式为 宿主机映射端口:容器运行端口

-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户远程登陆密码

                3.测试
        4.2 tomcat部署
            1.拉取tomcat

docker pull tomcat

                2.创建容器

# 创建tomcat容器;并挂载了webapps目录


docker run -id --name=mytomcat -p 9090:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat

-p 表示地址映射

-v 表示目录挂载

                3.测试

                        在/usr/local/webapps目录下创建index.html,/usr/local/tomcat/webapps会自动映射,而后通过访问localhost:9090/查看能否访问成功。

        4.3 nginx部署
            1.拉取nginx

docker pull nginx

                2.创建容器

docker run -id --name=mynginx -p 90:80 nginx

-p 表示地址映射

                3.测试

                        访问localhost:90

        4.4 redis部署
                1.拉取reids

docker pull redis

                2.创建容器

docker run -id --name=myredis -p 6999:6379 redis

-p 表示地址映射

                3.测试

                        通过连接工具进行测试

五、迁移与备份

        5.1 docker容器操作步骤
        5.2 迁移 -> 备份详细步骤(假设已生成容器testcontainer)

                1. 生成新镜像

docker commit 容器名 即将生成的镜像名

docker commit testcontainer testcontainer_a

                2. 备份镜像 生成tar文件

docker save -o 即将生成的tar文件名 镜像名

docker save -o testcontainer.tar testcontainer_a

-o:表示output 输出的意思

                3. 迁移

                        将 tar文件 从 主机1 迁移至 主机2

                4. 恢复tar文件为镜像

docker load -i tar文件名

docker load -i testcontainer.tar

-i 表示input输入的文件

                5. 运行容器

docker run -id --name=newtestcontainer -p 9999:90 testcontainer_a

六、创建自定义docker镜像 - Dockerfile

        6.1 常用命令

命令

作用

FROM image_name:tag

定义了使用哪个基础镜像启动构建流程

MAINTAINER user_name

声明镜像的创建者

ENV key value

设置环境变量 (可以写多条)

RUN command

是Dockerfile的核心部分(可以写多条)

ADD source_dir/file dest_dir/file

将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

COPY source_dir/file dest_dir/file

和ADD相似,但是如果有压缩文件并不能解压

WORKDIR path_dir

设置工作目录

        6.2 实例1(创建jdk8的自定义镜像)

        将/usr/local/dockerjdk8目录下的Dockerfile文件创建为镜像,当后续创建为容器使用时,会自动创建 /usr/local/java/目录,并在该目录下映射jdk文件,从而实现jdk环境配置。

(1)创建目录

mkdir –p /usr/local/dockerjdk8

(2)下载jdk-8u144-linux-x64.tar.gz并上传到服务器上

(3)移动刚刚上传的 jdk 到 /usr/local/dockerjdk8 目录下面

mv jdk-8u144-linux-x64.tar.gz /usr/local/dockerjdk8

(4)/usr/local/dockerjdk8目录下创建文件Dockerfile 并编辑

# !!!!!!!Dockerfile 名字固定的,不能改
vi Dockerfile

(5)Dockerfile重设置环境变量 ,设置完成之后 先按下esc , 然后在 :wq 保存退出

#从哪拉取镜像(基础镜像)
FROM centos:7
#指定镜像创建者信息
MAINTAINER cb
#切换工作目录(后续通过run/exec进入该容器后显示的目录就是/usr)
WORKDIR /usr

#镜像中创建/usr/local/java目录
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中(这里因为jdk文件和dockerfile文件在同一目录下,否则需要指定jdk文件路径)
ADD jdk-8u144-linux-i586.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_144
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

(6)执行命令构建镜像

#docker build -t=‘镜像名’ .,注意这里的空格和.别丢掉,代表在当前目录下执行加载dockerfile

docker build -t='jdk1.8' .

7)安装缺少的依赖插件

        yum install glibc.i686

(8)查看镜像是否建立完成

docker images

        6.3 实例2(创建springBoot项目打包的可执行文件的镜像,常用于部署)
此处仅展示dockerfile文件内容:
# 基础镜像(从私有仓库拉取 JDK 1.8 基础镜像
FROM xxxxxxxxx/jdk1.8

# 复制dockerfile文件同目录下的文件到容器/root/目录下
ADD demo-consumer/target/demo-consumer-0.0.1.jar /root/
ADD demo-consumer/target/ko.deploy.sh  /root/

# 设置utf-8 避免乱码
ENV LANG en_US.UTF-8

# 设置权限(755 = 所有者可读可写可执行,其他人可读可执行)
RUN chmod 755  /root/demo-consumer-0.0.1.jar
RUN chmod 755  /root/ko.deploy.sh

# 设置端口号
EXPOSE 311111

# 容器启动命令,启动ko.deploy.sh文件
ENTRYPOINT /root/ko.deploy.sh

七、搭建私有仓库

        7.1 搭建私有仓库(linux系统)

(1)拉取私有仓库镜像

docker pull registry

(2)启动私有仓库容器

docker run -id --name=registry_a -p 5001:5000 registry

(3)打开浏览器 输入地址 http://ip:5001/v2/_catalog 看到{"repositories":[]} 表示私有仓库搭建成功并且内容为空

(4)修改daemon.json(开始配置加速镜像的配置文件)【mac直接在docker可视化界面修改即可】

vi /etc/docker/daemon.json

#添加以下内容,保存退出。目的是让docker信任私有仓库地址

"insecure-registries":["ip:5001"]

(5)重启docker 服务

systemctl restart docker

        7.2 镜像上传

(1)标记此镜像为私有仓库的镜像

# 标记镜像为私有仓库的镜像  
# docker tag 上传的镜像名 宿主机IP:端口/上传后仓库的镜像名
docker tag jdk1.8 localhost:5001/jdk1.8

(2)再次启动私服容器

# 再次启动私有仓库容器  
docker start registry

(3)上传标记的镜像

# 上传标记的镜像  
# docker push 宿主机IP:端口/上传后仓库的镜像名
docker push localhost:5001/jdk1.8

(4)访问http://ip:5001/v2/_catalog

        7.3 镜像拉取

# 执行拉取镜像命令并查看 - linux主机操作

docker pull 宿主机IP:端口/上传后仓库的镜像名
docker pull localhost:5001/jdk1.8

# 执行拉取镜像命令并查看 - dockerfile操作

FROM localhost:5001/jdk1.8

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐