Docker 第二章

1.初识Docker

        我们写的代码会接触好几个环境:开发环境,测试环境,生产环境

        异常情况 

        解决

2.Docker的概念

        Docker是基于Go语言实现的云开源项目。

        Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次镜像,处处运行”。

         inux容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用打成镜像,通过镜像成为运行在Docker容器上面的实例,而 Docker容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

3.Docker的安装

        Docker可以运行在MAC、Windows、CentOS、UBUNTU等操作系统上,本课程基于CentOS7安装Docker。官网: Docker: Accelerated Container Application Development

        yum包更新到最新版本

yum update

         安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖

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

        设置yum源,指定Docker下载路径

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

        安装Docker,出现输入界面输入y        ce为社区免费版        ee为企业收费版

yum install -y docker-ce

        查看Docker版本,验证是否安装成功

docker -v

4.Docker的架构

         Docker镜像(images)就是一个只读的模板。镜像可以用来创建Docker容器,一个镜像可以创建很多容器。

        容器(container):Docker利用容器独立运行一个或一组应用,就像Java中的类和实例对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器为镜像提供了一个标准的和隔离的运行环境,它可以被启动,启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。

        仓库(reoisitory):是集中存放镜像文件的场所。类似于Maven仓库存放Jar包,Github仓库存放Git项目。

        Docker公司提供的官方registry被称为Docker Hub,存放各种镜像模板的地方。

        仓库分为公开仓库和私有仓库两种形式。

        最大的公开仓库是Docker Hub        http://hub.docker.com/

        存放了数量庞大的镜像供用户下载,国内公开仓库包括阿里云,网易云等。

5.配置Docker镜像加速器

        默认情况下,将来从Docker Hub上下载Docker镜像,速度过慢,所以都会配置镜像加速器。

        这里使用阿里云的镜像加速器。

        登陆阿里云官网,搜索  镜像  点击开通

 

        选择对应的操作系统,这里使用Centos然后将下方蓝色区域的代码复制粘贴到Centos系统中即可完成配置。 

6.Docker常用命令

        完成Docker镜像加速器配置会自动重启Docker服务。

        6.1Docker服务相关命令

        启动Docker服务 

systemctl start docker

        关闭Docker服务 

systemctl stop docker

         重启Docker服务 

systemctl restart docker

        开启开机自启动Docker服务

 systemctl enable docker

        查看Docker服务状态

systemctl status docker 

        Docker服务的帮助命令

Docker 命令 --help 

        6.2Docker镜像相关命令

         查看本地所有镜像

docker images

        REPOSITORY :镜像名称

        TAG:镜像版本

        IMAGE ID:镜像ID

        CREATED:镜像创建时间,而不是镜像下载时间

        SIZE:镜像大小

        查看远程仓库Docker Hub的镜像

docker serach 镜像名,如redis

        NAME:镜像名称

        DESCRIPTION:镜像描述

        STARS:关注的人

        OFFICIAL:是否官方

        AUTOMATED:是否自动化

        拉取镜像到本地,若未写版本号,默认拉取最新版--latest

docker pull 镜像名,如redis:版本号

        删除本地镜像

 docker rmi 镜像名:版本号        |        镜像ID

        6.3Docker容器相关命令

        运行容器

docker run -it --name=c7 centos:7 /bin/bash

        -i:保持容器一直运行,因为容器没有客户端连接会自动关闭

        -t:给容器分配伪终端接收命令

        --name:给容器取名字

        centos:7:容器运行的镜像名和版本号

        /bin/bash:进入容器的初始化命令,这里相当于打开一个shell窗口

        退出容器,该操作会关闭停止容器运行

exit

        退出容器,该操作不会停止容器运行

ctrl+q+p 

        查看运行的容器

docker ps

         查看所有容器

docker ps -a

         CONTAINER ID:容器ID

        IMAG:镜像名及版本号

        COMMAND:命令

        CREATED:容器创建时间

        STATUS:容器状态,Up运行,Exited退出

        PORTS:端口号

        NAMES:容器名称

        进入运行的容器

docker exec -it 容器id | 容器名 /bin/bash

        再次进入容器时,使用exit指令不会将容器关闭

         启动容器

docker start 容器名 | 容器id

        关闭容器

docker stop 容器名 | 容器id 

        删除停止的容器

docker rm  容器名 | 容器id 

        强制删除容器

docker rm -f 容器名 | 容器id 

        查看容器日志

docker logs 容器名 | 容器id 

7.容器的数据卷

        Docker容器删除后,容器产生的数据还存在吗?

        Docker容器和外部机器可以直接交换文件吗?

        容器之间想要进行数据交互怎么办?

        数据卷的概念

                数据卷是宿主机中的一个目录或文件

                当容器目录和数据目录绑定后,对方的修改会立即同步

                一个数据卷可以被多个容器同时挂载

                一个容器也可以被过载多个数据卷

        作用

                解决数据持久化问题

                解决外部机器和容器的间接通讯问题

                解决容器之间的数据交换

        配置数据卷

                在创建容器时,使用-v参数设置数据卷,目录路径必须为绝对路径,没有目录会自动创建目录,并且可以挂载多个数据卷。

docker run -i --name=c1 -v /宿主机目录:容器内目录 centos:7 /bin/bash

        这样就将容器与数据卷绑定好了,并帮我们创建了目录。

        此时目录中还没有数据,我们手动创建一个文件,查看容器内对应的文件夹内是否有该文件。

        此时创建好了文件之后,我们前往容器中,使用命令进入。

docker exec -it c1 /bin/bash 

         可以看到此时该容器中也有了相同的文件,那我们尝试在容器中修改文件,然后前往宿主机查看是否有修改。

        可以看到,在容器中编辑了内容在宿主机上也同步了,这样就配置好了数据卷。

8.Docker应用部署

        8.1安装Mysql 

                从远程仓库拉取mysql镜像

docker pull  mysql:5.7

                运行Mysql容器

docker run -id --name=m1 -p 宿主机端口:容器端口 -e MYSQL_ROOT_PASSWORD=密码 镜像名:版本号

        -p:表示宿主机的端口和容器内部端口映射

        -e:表示环境设置

         这里就启动了mysql,需要注意的是,如果在宿主机上开启了mysql服务,将会导致navicat工具连接不上mysql,会提示端口被占用。

        解决方法:在宿主机上关闭mysql服务

systemctl stop mysqld

        然后在window打开navicat工具连接容器的mysql服务

        提示连接成功即可。 

        8.2安装Tomcat

                从远程仓库拉取镜像

docker pull tomat:9.0

                使用Docker运行容器

docker run -id --name=t1 -p 8081:8080  tomcat:9.0

                如果安装9.0及以上版本,使用此命令运行容器

docker run -it --name=t1 -p 8081:8080  tomcat:9.0 /bin/bash

                进入容器内部,将webapps目录删除

rm -rf webapps

                然后将webapps.dist目录重命名为webapps

mv webapps.dist/ webapps

                修改完成后,重启容器

docker restart t1

                使用window访问8081端口

        8.3安装Redis

                从远程仓库拉取镜像

docker pull redis

                运行容器,需要指定的目录有一份redis.conf配置文件

docker run -id --name=r1 -v /usr/local/soft/data/redis/redis.conf:/usr/local/soft/data/redis/redis.conf -v /usr/local/soft/data/redis/data/:/data -p 6378:6379 redis

                第一个-v是使用数据卷绑定redis的配置文件,第二个-v是使用数据卷绑定redis的快照文件,可以使数据持久化,不丢失。

                然后进入redis容器

docker exec -it r1 /bin/bash

                连接redis客户端

redis-cli

                随意设置几个值

set k1 v1

set k2 v2

save

                save是用来保存快照文件,将这些操作保存到快照文件中。然后可以删除此容器

docker rm -f r1

                然后再次运行容器,可以发现在redis客户端使用以下指令,数据还是存在

keys*

        8.4安装RabbitMQ

                从远程仓库拉取代码

docker pull rabbitmq:management

                management表示图形化管理

                运行容器

docker run -id --name=mq1 -p 5671:5672 -p 15671:15672 rabbit:management

                第一个-p表示的是使用idea连接mq的端口,第二个-p是图形化端口

                使用图形化端口访问rabbitmq。

        8.5安装Nginx

                从远程仓库拉取镜像

docker pull nginx

                运行容器,需要指定的目录有一份nginx.conf配置文件

docker run -id --name=n1 -v /usr/local/soft/data/nginx/nginx.conf:/usr/local/soft/data/nginx/nginx.conf -p 8425:80 nginx

                通过映射的端口访问nginx

                出现该页面表示运行成功。

9.自定义镜像

        9.1Dockerfile的概念

                Dockerfile是一个文本,任意一个镜像都是通过dockerfile来制作的

                文件包含了一条条的指令

                每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像

                对于开发人员:可以为开发团队提供一个完全一致的开发环境

                对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockefile文件构建一个新的镜像开始工作

                对于运维人员:在部署时,可以实现应用的无缝跨平台移植

                9.2Dockerfile的关键字

        9.3创建Docker镜像

                切换当前目录

cd /usr/local/soft

                创建一个目录用于存放dookerfile

mkdir dockerfile && cd dockerfile

                编辑镜像文件

vi centos_dockerfile

                 运行此镜像

docker build -f /usr/local/soft/dockerfile/centos_dockerfile -t mycentos:7 .

                -f:表示的是dockerfile镜像文件的路径

                -t:表示的是镜像的名称,之后一定一定要跟一个空格和一个点

                修改一下镜像文件的内容,因为该配置会导致vim下载不下来。

FROM centos:7
MAINTAINER yzx
WORKDIR /usr
RUN sed -i 's|^mirrorlist=|#mirrorlist=|g' /etc/yum.repos.d/CentOS-Base.repo && \
    sed -i 's|^#baseurl=http://mirror.centos.org/centos|baseurl=http://mirrors.aliyun.com/centos|g' /etc/yum.repos.d/CentOS-Base.repo && \ yum makecache
RUN yum install -y vim
CMD /bin/bash

                

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值