docker知识总结

Docker简介

    Docker 是一个开源的应用容器引擎, 让开发者可以打包自己的应用以及依赖包到一个可移植的容器中, 然后发布到任何流行的 Linux 机器上, 容器时完全使用沙箱机制, 相互之间不会用任何接口.

    一个完整的 Docker 包含以下几部分:

  1. DockerCilent 客户端
  2. Docker Daemon 守护进程
  3. Docker Images 镜像
  4. Docker Container 容器

    Docker 使用客户端-服务器(C/S)架构模式. Docker Container 通过 Docker Images 来创建. container 与 images 的关系类似于 Java中对象和类

DockerJava
containerobject
imagesclass

    Docker 通过 Docker Daemon 作为服务器端接口来自客户端的请求,并处理这些请求(创建, 运行, 分发容器).Docker Deamon 一般在宿主机主机后台运行,等待接收来自客户端的消息. client 和 server 通过 Docker Deamon 来进行交互

Docker三部件

  1. images 镜像

          Docker Images 是 Docker 容器运行时的只读模板, 每个 images 都是由一系列层组成. Docker 使用 UnionFS 来将这些层联合到单独的镜像中. UnionFS 允许独立文件系统中的文件夹和文件(称之为分支)被透明覆盖, 行程一个单独连贯的文件系统. 当你改变一个 Docker Images, 比如升级到某个新版本, 一个新的层就会被创建或者更新其中的一个层, 不用替换原先的镜像. Docker 基础镜像获取: https://hub.docker.com/r/couchbase/server/

Docker Images 的运行基于内核虚拟化技术(宿主机硬件设施), 正式如此 Docker 才会如此轻量, 我们只需要关注我们自己需要的, 根据基础镜像订制我们自己需要的镜像

注:下文中使用 [] 括起来的都为用户自定义;如: [images] = tomcat

      2. Docker 仓库

           Docker 仓库是 Docker 镜像的存储仓库. 可以将镜像推送到 Docker 仓库中, 然后在 Docker 客户端, 可以从 Docker 中下载这些镜像

       3. Docker 容器

           一个 Docker 容器包含了一个操作系统, 用户添加的文件和元数据. 每个容器都是从镜像建立的, 镜像告诉 Docker 容器内包含了什么, 当容器启动时运行什么程序, 还有许多配置项数据. Docker 镜像是只读的, 当 Docker 运行一个从镜像简历的容器, 它会在镜像顶部添加一个可读写的层, 应用程序可以在这里运行.

Docker 安装和使用(centos7.0)

Docker基础安装可参考官网

     我们自己安装一般安装社区版(CE)

  1.  \ 属于连接符
# 删除旧版本和已安装
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce
# 安装必须的工具包
sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2
# 仓库安装
sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
# 启用边缘和测试存储库(可忽略)
sudo yum-config-manager --enable docker-ce-edge

sudo yum-config-manager --enable docker-ce-test
# docker-ce 安装
sudo yum install docker-ce
# 安装好的 在不启动的情况下可以通过下面的命令查看 docker 版本信息
docker version
# docker 启动
systemctl start docker

Docker 基本命令

注: ①使用 [] 括起来都为用户自定义; 如: docker search [name] ==> docker search mytomcat 搜索本地是否有 mytomcat 该镜像.

      ② 在使用 docker 命令前. 可以通过 docker --help 查看帮助, 养成自己学习的习惯, 虽然可以百度

# 搜索 docker 中 name 的镜像 [docker search --help]
docker search [name]  
# 下载镜像, tag表示版本,不加tag 默认下载latest版本
docker pull [name:tag] 
# 查看本地下载的镜像
docker images 
# 根据 镜像 id 删除镜像
docker rmi [images id]
# 容器操作(tomcat 为例)
# 搜索镜像 
docker search tomcat
# 拉取镜像, 后面没有 :tag 表示使用最新版本 latest
docker pull tomcat
# 根据镜像启动容器
# 1. 守护进程的方式运行 -d 表示后台运行; 
docker run -d --name [container-name] images:tag(本地已存在镜像)
# 2. 以交互的方式运行, 可以进入到容器内部进行操作
docker run -it --name [container-name] images:tag
# 查看运行中的容器
docker ps
# 停止运行中的容器,通过容器id 或者 容器名字
docker stop [container-id(container-name)]
## 查看所有容器
docker ps -a
# 启动 docker 中存在的容器, 默认后台运行
docker start [container name<id>]
# -i 表示以交互形式启动
docker start -i [container name<id>]
# 停止容器, 退出前必须做一些保护性安全性操作
docker stop [container name<id>]
## kill 直接停止容器
docker kill [container name<>id>]
# 删除一个停止状态的容器
docker rm [docker name<id>]
## 强制删除一个容器
docker rm -rf [docker name<id>]
# docker 内部端口映射到外部可以访问的端口.映射镜像容器端口,方便外部访问 (-p表示指定映射端口-P 随##机分配一个端口, 1111 ##表示外部访问映射的端口,8080表示镜像容器运行的端口)
docker run --name [container-name] -d -p 1111:8080 tomcat:latest 
# 启动 mysql 容器 -e 指定 root 用户的密码
docker run --name mysql01 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
# 备份 docker 中 mysql
docker exec mysql01 sh -c ' exec mysqldump --all-databases[或者指定数据库--databases db1] -uroot -p "123456"' > [宿主机目录/all-databases.sql]
# 当容器已交互方式运行是, ctrl + p + q 不停止退出到宿主机, exit 停止容器退出
## 当 ctrl + p + q 退出容器后通过以下命令重新进入
docker attach [container name<id>]
# 或者 exec 命令可以 直接在宿主机执行 docker exec -it [container name<id>] ls -l
docker exec -it [container name<id>] /bin/bash
# 批量删除镜像和容器(方法很多)
docker rmi -f $(docker images -qa)
docker rm -f $(docker ps -qa)
# 查看容器详细信息
docker inspect [container]
# 从容器中复制文件到宿主机
docker cp [containerpath]:/root/yum.log [原主机目录]
# 容器数据卷: 用作数据的持久化
# ① 通过命令的形式实现
docker run -it -v /宿主机目录;/容器目录 imagesname
# ② 通过 dockerfile 实现
# 自定义镜像 volume-from 继承
# dockerfile 文件中指定的数据备份目录,[container1] 和 [container2]  都会有相同的目录并且目录## 中的数据会共享,知直到容器不再使用
docker run -it --name [container1] --volume-from [container2] images

通过 dockerfile 构建自定义容器

  1.  编写dockerfile 自定义构建镜像,参考官网

# 执行命令 
docker build -f [/path/dockerfile] -t images:tag . 

 

dockerfile (保留字指令)

FORM : 基础镜像, 当前镜像基于那个镜像

MAINTAINER: 镜像维护这的姓名和邮箱地址

RUN: 容器运行时需要构建的命令

EXPOSE: 是当前容器对外暴露的端口

WORKDIR: 指定在创建容器后, 终端默认登陆进来的工作目录,(主要应用于交互式容器启动)默认在 / 目录

ENV: 用来在构建镜像过程中设置环境变量 EVN KEY /usr WORKDIR $KEY 使用上面定义的变量

ADD: 将宿主机目录下的文件拷贝进镜像且 ADD 指令会自动处理 URL 和解压 tar 压缩包

COPY: 类似 ADD 但是不会解压

VOLUME: 容器数据卷, 用于数据保存和持久化工作

CMD: 指定一个容器启动时要运行的命令 dockerfile 中可以有多个 CMD 但是只有最后一个,生效, 并且会被 docker run 之后的参数替代

ENTRYPOIBNT: 追加不会失效和替换

ONBUILD: 触发器, 构建一个被继承的 dockerfile 时运行命令, 父镜像被子镜像继承后父镜像的 ONBUILD 会被触发

一个根据 Dockerfile 自定义的 tomcat

 

-- privileged=true 如果没有写权限

将本地镜像 push 到云端

① commit 以已运行容器创建新镜像

docker commit -a [author] -m [commi message] [containername<id>] images:tag

② 将新镜像推送到阿里云

需要在阿里云先创建命名空间和仓库

 

 

 

将 springboot 项目部署到 docker 容器

  1. 创建一个springboot 项目, 并打包 jar

       2. 编写 Dockerfile1 

FROM centos
MAINTAINER Samasara<yy502119341@163.com>
# 把 java 添加到容器中
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
# COPY 只是复制不会解压
COPY docker.jar /usr/local/project/
#设置工作访问时候的 workdir 路径, 
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置 java 环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_181
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV PATH $PATH:$JAVA_HOME/bin

CMD echo "success=========="
# build 后,启动镜像后运行 打包好的 .jar
ENTRYPOINT ["java","-jar","/usr/local/project/docker.jar"]

       3. 将需要的 jdk 和 .jar 放到编写 Dockerfile 同级目录

      4. build 

docker build -f Dockerfile1 -t dockerhello:1.0 .
# 运行镜像
docker run -it -p 1000:88 --name boot dockerhello:1.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值