Docker初学完整入门

Docker

简单了解

建议: Maven、Git相关知识

一次封装,到处运行

解决了运行环境和配置软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术

三大特点:镜像、容器、仓库

开发语言Go

容器和镜像的区别在于容器的最上面那一层是可读可写的

仓库(repository)是存放镜像文件的场所。

仓库和仓库注册服务器是有区别的。仓库注册服务器上面存放着多个仓库,每个仓库存放多个镜像。

linux 安装

yum install -y epel-release(依赖)

yum install -y docker-io

配置文件 /etc/sysconfig/docker

启动docker :service docker start
在这里插入图片描述

底层运行原理和机制

docker是一个Client-Server结构的系统,Docker守护进程运行在主机上,然后通过Socket连接从客户端访问,守护进程从客户端接收命令并管理运行在主机上的容器。容器是一个运行时环境。

docker不需要Hypervisor实现硬件资源虚拟化,直接使用主机硬件;docker直接利用宿主机的操作系统,VM会重新启动一个系统,所以会比虚拟机快

常用命令

docker version #版本号

docker info #个人信息描述

docker --help #帮助信息

docker images #列出本地镜像 docker images -a #列出所有镜像(含中间层) docker imags -q #列出镜像的ID

docker images --digests #显示摘要信息 docker images --digests --no-trunc #显示完整的镜像信息

docker search <镜像名字> #查找镜像 docker search -s 30 <镜像名字> #列出点赞数超过30的镜像

docker pull <镜像名字> #下载拉取镜像(没有版本号为最新版)

docker rmi -f <镜像ID> #强制删除镜像

docker rmi -f <镜像ID> <镜像ID> #删除多个

docker rmi -f $(docker iamges -qa)#删除所有

docker run [OPTIONS] IMAGE [COMMAND] [ARG…] #新建并启动容器

OPTIONS说明(常用):有些事一个减号,有些是两个

​ --name=“容器新名字”:为容器指定一个名称;

​ -d:后台运行容器,并返回容器ID,也即启动守护式容器;

​ -i: 以交互模式运行容器,通常与-t同事使用;

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

​ -P: 随机端口映射

​ -p: 指定端口映射,有以下四种方式

​ ip:hostPort:containerPort

​ ip::containerPort

​ hostPort:containerPort

​ containerPort

ps -ef用于查看全格式的全部进程,其中“ps”是在Linux中是查看进程的命令,“-e ”参数代表显示所有进程,“-f”参数代表全格式。

exit #退出docker

docker ps #运行的docker容器 docker ps -l #上一次运行的docker

docker run -it --name <别名>

docker ps -lq #只显示容器编号

docker start/stop <容器ID或者容器名字> #启动/暂停容器

一次性删除容器

docker rm -f $(docker ps -a -q) 

docker ps -a -q | xargs docker rm

docker run -d <容器名> #启动守护式进程

docker logs -t -f --tail <数字> <docker_name>

docker top <容器ID> #查看容器内进程

docker inspect <容器ID> #查看容器内部细节

docker attach <容器ID> #重新进入docker Ctrl +Q+P #退出但不停止

镜像原理

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,包括代码、运行时、库、环境变量和配置文件。

UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker的基础。

镜像可以通过分层来进行继承。

特性:一次同时加载多个文件系统,但是从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

在这里插入图片描述

bootfs和rootfs

最大的好处就是-共享资源

Docker镜像commit

docker commit 提交容器副本使之成为一个新的镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

docker容器数据卷

卷的设计目的就是数据卷的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除的时候删除其挂载的数据卷

特点:

1.数据卷可在容器之间共享或重用数据

2.卷中的更改可以直接生效

3.数据卷中的更改不会包含在镜像的更新中

4.数据卷的生命周期一直持续到没有容器使用它为止

容器间继承+共享数据

docker cp #从docker容器拷贝文件到主机

容器内添加数据卷:直接命令添加、DockerFile添加、备注

直接命令添加

docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

容器停止退出后,主机修改后数据依然同步

命令(带权限)docker run -it -v /宿主机绝对路径:/容器内目录:ro 镜像名

最后的:ro是模式,ro为read only,默认为rw,read write

DockerFile添加

Docker images ===> DockerFile

File构建

build后生成镜像 docker build -f <dockerfile文件> -t <docker名字> . (别忘记最后的点)

docker run -it <docker名字> /bin/bash

数据卷容器

命名的容器挂载数据卷,其他容器通过 挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

docker run -it --name doc01 hehe/centos

volumes-from

docker run -it --name doc02 --volumes-from doc01 hehe/centos

docker run -it --name doc03 --volumes-from doc01 hehe/centos

即继承又共享 doc01/2/3中任何一个添加文件另外两个都会增加

DockerFile是什么

手动编写符合规范的dockerfile文件

直接docker build命令执行

run

基础知识

1.每条保留字指令都必须为大写字母且后面要跟随至少一个参数

2.指令按照从上到下,顺序执行

3.#标识注释

4.每条指令都会创建一个新的镜像层,并对镜像进行提交

体系结构

FROM--基础镜像,当前新镜像是基于哪个镜像的

MAINTAINER--镜像维护者的姓名和邮箱地址

RUN--容器构建时需要运行的指令

EXPOSE--暴露的端口号

WORKDIR--指定在创建容器后,终端默认登录的进来工作目录,一个落脚点,

ENV--用来在构建镜像过程中设置环境变量    ENV <name> <path>    $name 就是指定的path

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

COPY--类似ADD,拷贝文件和目录到镜像中。COPY src dest      COPY [“src”,“dest”]

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

CMD--指定一个容器启动时要运行的命令,可以有多个CMD,但是只有最后一个生效,CMD会被docker run之后的参数替换   CMD <命令> 或者 CMD ["可执行文件",“参数1”,“参数2”...]

ENTRYPOINT--指定一个容器启动时要运行的命令,docker run 之后的参数会追加,不会被覆盖

ONBUILD--当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

案例

docker history <容器ID> 显示容器创建过程

自定义镜像Tomcat

1.mkdir /data/tomcat9

2.在上述目录下touch c.txt

3.将jdk和tomcat安装的压缩包拷贝进第一步目录

4.在第一步目录下新建Dockerfile

5.构建

6.Run

7.验证

8.结合前述的容器卷将测试的web服务test发布

阿里云

https://cr.console.aliyun.com/repository/cn-hangzhou/xdhughie/mycentos/details

  1. 登录阿里云Docker Registry
$ sudo docker login --username=18519198841 registry.cn-hangzhou.aliyuncs.com

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在产品控制台首页修改登录密码。

  1. 从Registry中拉取镜像
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/xdhughie/mycentos:[镜像版本号]
  1. 将镜像推送到Registry
$ sudo docker login --username=18519198841 registry.cn-hangzhou.aliyuncs.com$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xdhughie/mycentos:[镜像版本号]$ sudo docker push registry.cn-hangzhou.aliyuncs.com/xdhughie/mycentos:[镜像版本号]
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值