Docker

一、Docker简介

1、docker概述

1、Docker 是一个开源的应用容器引擎
2、诞生于 2013 年初,基于 Go 语言实现, dotCloud 公司出品(后改名为Docker Inc)
3、Docker 是一个可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器引擎(好比汽车发动机),然后发布到任何流行的 Linux 机器上。
4、容器是完全使用沙箱机制,相互隔离
5、容器性能开销极低。
6、Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)

2、docker应用场景

案例一:

前几天,公司一批服务器就要到期了,由于服务器是15年购买的,硬件的性能远比现在新出的云主机低,因此决定把所有服务器都换成新一代服务器,但是张三正准备动手迁移服务器时,内心一阵阵崩溃感涌上心头,仔细一算,每台服务器都要做同样的事情。

1、装jdk、Tomcat、nginx
2、配置jdk环境变量和系统变量
3、配置Tomcat
4、配置nginx
5、安装项目所需的视频解码组件
6、导入项目所需的一些特殊字体 

后来决定用docker部署的办法,在每台服务器都把docker安装之后,只需要在其中一台服务器中把Tomcat镜像从镜像仓库拉取下来,把这些配置都设置好,做成一个自己的镜像上传到镜像仓库中,之后在其他几台服务器都下载自己做的镜像,运行于docker中,把代码上传,就万事大吉了

案例二

前不久的圣诞活动中,公司临时的活动方案在程序员的加班加点中终于上线,但是一上线之后发现推广海报中的中文名字乱码,领导问责测试人员怎么没做好测试,测试很委屈的说我已经测试无数遍并且测试报告都提交了,解决了所有问题才上线的;没办法只能让服务器同事查看正式服务器中的tomcat配置,发现原来 tomcat用了默认编码方式:iso8859-1,而测试环境中是UTF-8。针对这个问题,项目组决定把开发环境迁移到docker中,在测试环境中测试无误后,把镜像打包发布到正式环境中,解决了环境不同导致的问题

3、安装docker

  • 检查防火墙  

        开发环境中,我们通常会关闭防火墙。  

        systemctl status firewalld  # 查看防火墙状态
        systemctl disable firewalld --now #禁用防火墙,并立即生效 

  •  卸载旧版本

        较旧的 Docker 版本称为 dockerdocker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。  

yum remove docker \
      docker-client \
      docker-client-latest \
      docker-common \
      docker-latest \
      docker-latest-logrotate \
      docker-logrotate \
      docker-engine 

  • 为linux安装yum插件(如果有则不用安装)  

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

  • 添加 docker 软件源  

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

考虑到从 docker 官方的仓库下载 docker-ce 有时会比较慢,可以使用下述命令将下载网址改为清华(或其它)的仓库路径:

sudo sed -i \
    's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' \
    /etc/yum.repos.d/docker-ce.repo 

  • 验证。查看所有仓库中所有 docker 版本:  

yum list docker-ce --showduplicates | sort -r 

说明:  

CentOS 的默认的 yum 软件源中实际上有 docker 的安装包,如果直接进行 yum install docker 也是可行的。
但是 docker 官方考虑到不同的用户对 docker 的不同版本有不同的需求(有人追求最新,有人追求稳定),他们专门提供了一个仓库/网址用以提供多个版本的 docker 的下载。
因此,我们必须告知 yum 有这样一个仓库的存在,并且未来要求 yum 从这个仓库中下载我们指定版本的 docker 。而非默认的仓库。 

  • 安装命令总结  

[root@localhost ~]#yum install -y docker-ce   # 安装docker
[root@localhost ~]#        #查看docker版本,验证是否验证成功 

4、docker相关概念

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
  • 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。  

二、Docker命令

1、进程相关命令

systemctl start docker    #启动docker服务
systemctl stop docker     #停止docker服务 
systemctl restart docker  #重启docker服务 
systemctl status docker   #查看docker服务状态
systemctl enable docker   #开机启动docker服务
systemctl disable docker  #关闭开机启动docker服务 

2、 镜像相关命令

a、配置镜像加速器

首先登陆阿里云,点击控制台,然后再点击左边的像三字一样的图标,再点击产品与服务,在输入关键字地方搜索“镜像”,会显示容器镜像服务,点击“容器镜像服务”,在左侧的最下方有镜像中心(镜像加速器),点击镜像加速器,复制如下代码到linux执行即可

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://58xnm6gw.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker 

b、查看镜像

[root@localhost ~]#docker images    #查看本地所有的镜像    
[root@localhost ~]#docker images –q # 查看所有镜像的id 

c、搜索镜像

docker search 镜像名称
[root@localhost ~]#docker search  redis  #从网络中查找redis镜像 

d、拉取镜像

从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本,如果不知道镜像版本,可以去docker hub 搜索对应镜像查看。 https://hub.docker.com/_/docker

 docker pull 镜像名称:版本号
[root@localhost ~]#docker pull redis:5.0 
[root@localhost ~]#docker pull centos:7 
[root@localhost ~]#docker pull mysql:8.0.25 
[root@localhost ~]#docker pull tomcat:8
[root@localhost ~]#docker pull nginx

如果拉取镜像报超时,执行如下命令:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker 

e、删除镜像

删除本地镜像

[root@localhost ~]#docker rmi 镜像id
[root@localhost ~]#docker rmi redis  #删除dokcer中下载的redis镜像 

3、 容器相关命令

a、查看容器

[root@localhost ~]#docker ps       # 查看正在运行的容器
[root@localhost ~]#docker ps –a    # 查看所有容器 (包括没有运行的容器) 

b、创建并启动容器

docker run -it | -id --name=容器名称 镜像名称:版本 /bin/bash
[root@localhost ~]#docker run -it --name=tomcat8080 tomcat:8 /bin/bash   #创建并自动进入容器,当输入exit 退出容器并回到宿主机
[root@localhost ~]#docker run -id --name=tomcat8080 tomcat:8                 #创建容器 但不进入容器 

参数说明:

  • -i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后(执行命令exit),容器自动关闭

  • -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用

  • -d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭

  • /bin/bash 这是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器就会退出。这个就表示启动容器后启动bash。默认会启动一个bash,可以忽略不写

  • -p:将linux服务器的端口与dokcer容器的端口进行映射

docker -id  -p  linux端口:docker容器端口 --name=tomcat8080 tomcat:8
eg:
docker -id  -p  8080:8080 --name=tomcat8080 tomcat:8 

设置容器自动启动 

  • 启动时加--restart=always  

docker run -tid --name 容器名称 -p 8081:8080 --restart=always -v 你的镜像挂载名称

restart参数说明:
    no             不自动重启容器. (默认value)
    on-failure     容器发生error而退出(容器退出状态不为0)重启容器
    unless-stopped 在容器已经stop掉或Docker stoped/restarted的时候才重启容器
    always         在容器已经stop掉或Docker stoped/restarted的时候才重启容器

 

  • 如果项目非首次启动,则使用update更新镜像实现自动启动  

docker update --restart=always 容器名称 

c、进入容器

docker exec 参数  /bin/bash      #进入容器  注意 此处的/bin/bash不能省略
[root@localhost ~]#docker -id --name=c2 centos:7
[root@localhost ~]#docker exec -it c2 /bin/bash
[root@localhost ~]#exit         #此时容器还是在运行着的 

d、启动容器相关命令

docker start  容器名    #启动容器
docker restart 容器名   #重启容器
docker stop   容器名    #停止容器
docker rm 容器名        #删除容器
docker inspect 容器名称  #查看容器名称
docker logs --tail 行数 -f  容器名   #查看某个容器日志
eg:
 docker logs --tail  300 -f tomcat  #查看某个容器末尾300行的日志内容 

e、docker容器安装命令

apt-get  update # 更新apt网络组件
apt-get  -y install net-tools  # 安装net-tools组件
apt -y install vim* #安装vim编辑器
apt -y install vi* #安装vi编辑器 

f、用于容器与主机之间的数据拷贝

docker cp 宿主机数据据 容器名:容器中的路径
eg:
docker cp /root/index.html tomcat:/usr/local/tomcat/webapps/hello/

将容器tomcat的/usr/local/tomcat/webapps/hello目录拷贝到主机的/root/hello目录中
docker cp  tomcat/usr/local/tomcat/webapps/hello:/root/hello/

 

  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值