Docker 学习

docker 简介

docker是一个开源的应用容器引擎(分层结构),开发者可以打包自己的应用到容器里面,然后迁移到其他机器的docker应用中,可以实现快速部署。如果出现的故障,可以通过镜像,快速恢复服务。

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

docker 安装

安装

1. 卸载:
yum remove docker \                   
    docker-client \             
          docker-client-latest \         
          docker-common \            
           docker-latest \                 
         docker-latest-logrotate \       
          docker-logrotate \             
          docker-engine

2. 安装yum-utils软件包
    yum install -y yum-utils
    yum-config-manager \
        --add-repo \
        https://download.docker.com/linux/centos/docker-ce.repo
可以替换为:
   	 http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   阿里云 建议使用

3. 安装DOCKER引擎
    可以先更新yum   yum  makecache fast  (可以不执行)
    yum install docker-ce docker-ce-cli containerd.io

配置阿里云镜像

  1. 登录阿里云 进入地址:
    https://cr.console.aliyun.com/cn-beijing/instances/mirrors

  2. 修改daemon配置文件/etc/docker/daemon.json来使用加速器
    参考阿里云文档

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

docker 启动

systemctl start docker  启动
systemctl stop docker 关闭
systemctl status docker  状态
systemctl restart docker 重启
docker version  版本
systemctl enable docker  开机自起

镜像基本命令

docker stats: 内存占用情况
docker images 查看镜像       -a  所有信息      --digests  完整镜像id
docker search  查询镜像    -s  收藏大于 镜像
docker pull 拉取
docker rmi  删除  -f 强制删除
docker rmi  $(docker images -aq)  删除所有

容器基本命令

docker run  运行镜像
    -i 以交互模式运行容器,通常与 -t 同时使用
    -t  为容器重新分配一个伪输入终端,通常与 -i 同时使用
    -d 后台运行容器,并返回容器ID
    --name  为容器指定一个名称
    -p  指定端口映射,格式为:主机(宿主)端口:容器端口
    -P: 随机端口映射,容器内部端口随机映射到主机的高端口
    --net 指定network

docker    start/stop/restart  容器名|容器id

退出运行容器
    exit 退出停止
    Ctrl+p+q  退出不停止

docker  rm    删除容器
    -f  强制删除
    -l :移除容器间的网络连接,而非容器本身。
    -v :删除与容器关联的卷。
    docker rm $(docker ps -a -q)    删除所有已经停止的容器

docker pause :暂停容器中所有的进程。
docker unpause :恢复容器中所有的进程。
docker create :创建一个新的容器但不启动它
    docker create  --name myrunoob  nginx:latest  

docker exec :在运行的容器中执行命令  开启新终端
    docker exec -it 容器  /bin/bash
    
 root 用户进入
docker exec -it --user root <container id> /bin/bash

docker  attach :进入正在运行代码终端
docker inspect : 获取容器/镜像的元数据。

docker logs : 获取容器的日志
    -f : 跟踪日志输出
    --since :显示某个开始时间的所有日志
    -t : 显示时间戳
    --tail :仅列出最新N条容器日志
    docker logs  -f  tomcat
    docker 日志目录 /var/lib/docker/containers
docker export :将文件系统作为一个tar归档文件导出到STDOUT。
    -o :将输入内容写到文件。
        docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
        docker export -o tomcat-`date +%Y%m%d`.tar 容器id


docker import : 从归档文件中创建镜像。
    docker import  【tar 包】 新镜像名称
    docker import tomcat-20200616.tar my/tomcat:v1

docker save : 将指定镜像保存成 tar 归档文件。
    docker save -o  tomcat2.tar my/tomcat
    -o :输出到的文件
    docker save -o 【tar名】 镜像名

docker load : 导入使用 docker save 命令导出的镜像。
    --input , -i : 指定导入的文件,代替 STDIN。
    --quiet , -q : 精简输出信息。
    docker load --input tomcat2.tar 

docker port :列出指定的容器的端口映射


docker cp :用于容器与主机之间的数据拷贝
    docker cp tomcat:/usr/local/tomcat/webapps /root/tomcat   拷贝到宿主机
    docker cp a.txt tomcat:/usr/local/tomcat/webapps  拷贝容器中

docker login -u 用户名 -p 密码
docker logout
docker commit :从容器创建一个新的镜像。
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停。
    docker commit -a  "dc"  -m  "tijiao"  容器id   新容器:版本
    
docker push : 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
    注意 :本地镜像名称格式  (dockerhub登录名/镜像名:tag)

docker挂载

docker 挂载命令 -v

docker 目录挂载  -v
     docker run -it  --name  tomcat2 -p8090:8080
        -v 宿主主机目录:容器目录
        docker run -it --name tomcat2 -p8899:8080 -v /root/tomcat/:/usr/local/tomcat/cdata  tomcat:1.0

docker 挂载3中方式

  1. 匿名挂载
    在这里插入图片描述

    docker volume ls   查看卷
    docker run -d --name niming -P \
     -v /etc/nginx nginx
    

    匿名挂载不指定具体挂载目录
    通过 docker inspect 容器启动名|id 查看挂载信息
    在这里插入图片描述
    在这里插入图片描述

  2. 具名挂在 (比较常用)
    docker run -d --name juming -P -v juming-nginx:/etc/nginx ngin
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
3. 制定具体目录挂载
注意:挂在前有时候创建好目录 不然文件会被清空

docker run --name=nginx -d -p 80:80 -v /root/softdata/nginx/www:/usr/share/nginx/html \
    -v /root/softdata/nginx/nginx.conf:/etc/nginx/nginx.conf \
     -v /root/softdata/nginx/conf.d:/etc/nginx/conf.d \
     -v /root/softdata/nginx/log:/var/log/nginx nginx

  1. 容器之间挂载(数据卷容器) 容器间数据同步
    dcoker run -it --name docker02 --volumes-form docker02 镜像

Dockerfile

  1. 命令 都是大写
  2. 在这里插入图片描述
FROM 来源
MAINTAINER:作者(名字+<邮箱>)
RUN 运行命令
COPY:复制文件
ENV: 环境变量
EXPOSE :服务端口
WORKDIR :运行目录
ENTRYPORT:运行容器执行 可追加
CMD:运行容器执行 最后一个命令生效

编写centos

FROM centos
MAINTAINER dc<123456@qq.com>
ENV  MYPATH  /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
run yum -y install net-tools
EXPOSE 80
CMD echo $MYPAYH
CMD echo "---end--"
CMD /bin/bash

构建

注意最后有个“.”
docker build -f centosfile -t mycentos .

编写tomcat 镜像

放入相应包 创建Dockerfile(不用-f 可以构建)
在这里插入图片描述

FROM centos
MAINTAINER dc<123456@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u281-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.45.tar.gz /usr/local
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.45
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.45
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.45/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.45/logs/catalina.out

构建

docker build -t mytomcat .
drun -d -p  9090:8080 --name mytomcat -v /root/tomcat/test:/usr/local/apache-tomcat-9.0.45/webapps/test   -v /root/tomcat/
logs:/usr/local/apache-tomcat-9.0.45/logs mytomcat

测试
在test 创建WEB-INF 在创建web.xml ,然后再test下写html测试

编写springboot 镜像

FROM openjdk:8-jdk-alpine
MAINTAINER dc<123qq.com>
WORKDIR /root/boom
#日志 
VOLUME /logs
COPY /config/application.properties  application.properties
ADD boom-0.0.1-SNAPSHOT.jar boom.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "boom.jar"]

构建:
docker build -t myapp .

启动

docker run -d --name app -p5052:5050 -v /root/boom/log:/logs  -v /root/boom/config/application.properties:/root/boom/application.properties  myapp

如果想要输出日志挂载具体日志目录
springboot没有使用外部(如logback)只需 application.properties 配置
logging.file.name=/logs/app.log

编写docke-compose.yml 镜像

version: '2'
services:
 appcom:
  container_name: app1
  image: myapp:latest
  mem_limit: 1024m
  ports:
   - 5053:5050
  environment:
   - JAVA_OPTS="-Xmx1g -Xms512m"
  volumes:
    - ./log:/logs
    - ./config/application.properties:/root/boom/application.properties

简单学习 docker-compose up -d | 更新后:docker-compose build 重新构建

docker 网络

网络 docker 容器与容器直接连通 通过evth_pair 技术 成对出现
如:

  1. 启动一个tomcat 容器 查看容器ipaddr
    在这里插入图片描述
    查看本机ip addr

在这里插入图片描述
可以看见成对出现 ,同事可以看见网桥docker0 网段 本地与容器可以相互ping通
2. 启动第二个tomcat
3. 2 个tomcat 通过ip地址可以相互ping
在这里插入图片描述

但是如果是动态ip无法知道ip 通过容器名称是无法相互ping 可以使用最初 –link 解决

在这里插入图片描述
启动tomcat3 --link 连接tomcat1
进入Tomcat3 ping Tomcat1 可以ping通
tomcat3 与tomcat2 无法ping
但是tomcat1 无法ping tomcat3
所以不推荐使用–link

自定义网络

查看docker 网络
docker network ls
在这里插入图片描述

构建自定义网络

docker  network create  --driver bridge  --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

在这里插入图片描述

docker network create 创建
subne子网 gatwway 网关

启动容器 --net
在这里插入图片描述
可以发现容器之间可以相互ping

docker 监控 portainer

docker pull portainer/portainer

docker run -p 9000:9000 -p 8000:8000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/portainer/data:/data \
-d portainer/portainer
 

ip:9000 登录
在这里插入图片描述

可以监控本地 也可以监控远程·

监控远程需要开启远程端口

vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock

 systemctl daemon-reload
systemctl restart docker


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值