Docker整理

Docker基础

本笔记是在学习狂神说java的B站docker视频记录的。

Docker简介

什么是docker

开源的容器引擎

为啥要用docker

简化环境配置,环境一致性

docker三大核心概念

镜像(image):好比一个模板,可以创建多个容器

容器(container):通过镜像创建的可运行实例

仓库(repository):存放镜像的服务,可拉取和提交镜像

镜像vs容器

相当于类和实例的关系

镜像是静态的,相当于模板,一旦创建无法更改;容器是镜像的运行实体,可以被创建、启动、停止、删除、暂停等。一般运行时需使用数据卷(Volume)、或者绑定宿主目录,使其数据不丢失。

公有仓库vs私有仓库

Docker hub是公开服务,访问较慢一般使用国内镜像。

私有仓库通过docker registry提供的自行搭建,也可以通过第三方比如nexus搭建。

Docker安装

参考docker官网安装文档:https://docs.docker.com/engine/install/centos/ (我的是centos系统)

uname  -r                       #查看内核版本,centos7以上能装
#先删除本地已有docker再安装
$ sudo yum remove docker \
 docker-client \
 docker-client-latest \
 docker-common \
 docker-latest \
 docker-latest-logrotate \
 docker-logrotate \
 docker-engine

$ sudo yum install -y yum-utils
​
$ sudo yum-config-manager \
 --add-repo \
 https://download.docker.com/linux/centos/docker-ce.repo
​
$ sudo yum install docker-ce docker-ce-cli containerd.io
​
$ sudo systemctl start docker    # 启动
$ sudo docker run hello-world    # 验证

镜像加速器

创建或修改 /etc/docker/daemon.json文件

cd /etc/docker            # 进目录
vim daemon.json           # vim编辑,i插入
# 镜像加速器有很多,可自行百度选取
{
 "registry-mirrors": [
 "https://.mirror.aliyuncs.com",    //阿里云需自己生成
 "https://docker.mirrors.ustc.edu.cn",         //科大镜像站
 "https://hub-mirror.c.163.com",               //网易云
 "https://registry.docker-cn.com"              //中国官方镜像
 ]
}
# :wq保存并退出
systemctl daemon-reload    # deamon重新加载
systemctl restart docker   # 重启docker生效
docker info                # 可以查看刚刚改的镜像加速器

Docker指令

systemctl restart docker  #重启docker
systemctl stop docker     #关闭docker
docker version            #查看版本
docker logs               #查看日志
 -tf                      #显示日志
 --tail number            #显示日志条数
docker inspect            #查看元数据
​
#万能指令!!!
docker xxx --help        #不会的命令都用help查看用法

镜像命令

docker search               #搜索镜像
docker pull                 #获取镜像
docker images               #列出所有镜像 = docker image ls
docker system df            #镜像体积
docker image rm             #删除镜像 (用ID、镜像名、摘要)
docker commit               #保存镜像
docker rmi $(docker images -aq) #一次性删除所有镜像
docker history              #查看镜像打包记录

容器命令

docker ps                   #查看容器 = docker container ls 
docker ps -a                #查看所有包括退出的容器
docker exec                 #进入容器,开启一个新的终端,exit容器不会停止
docker attach               #进入容器,进入正在执行的终端,exit容器会停止
docker top                  #查看容器进程信息
docker container logs       #容器日志
docker run -d               #运行容器 -d参数使容器进入后台
docker import/export        #导入/导出容器
docker container rm         #删除容器
docker stop                 #停止容器
docker rm $(docker ps -aq)  #一次性删除所有容器
docker cp 容器id:/home/test.java /home #从容器内拷贝文件到主机上

:容器使用后台启动后,必须要一个前台进程,docker发现没有应用,就自动停止了。docker ps -a 才能看得到被停止的容器

常用命令图

百度图片搜docker就能找到很多跟docker有关的图


常用命令图

镜像加载原理

docker镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。bootfs底层是公用的,rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。image也是分层的,由dockerfile代码组成。

run运行流程

1.docker run 的时候会现在本地找镜像

2.找到了就直接使用本地的镜像运行

3.找不到就去docker hub 仓库下载

4.docker hub 找不到就报错——找不到该镜像

5.docker hub 找到了就下载到本地,docker images能看到

容器数据卷

什么是容器数据卷

容器之间可以有一个数据共享技术,docker容器中产生的数据,同步到本地

这就是卷技术!目录挂载,将我们容器内的目录,挂载到Linux上面。

数据卷作用

容器持久化和同步操作!容器间也可以数据共享。

同步过程:双向绑定

数据卷好处

本地修改即同步容器

使用数据卷

docker run -it -v 主机目录:容器内目录  # -v参数设置数据卷
#用docker inspect 查看 mounts
--volumes-from  #通过这个就能实现数据容器间共享

Dockerfile

介绍

dockerfile是docker镜像构建文件——命令脚本

脚本就是用来构建镜像的,docker镜像是一层一层的,脚本就是一个个的命令,每个命令都是一层。

构建步骤

1.编写一个dockerfile文件

2.docker build 构建一个镜像

3.docker run 运行镜像

4.docker push 发布一个镜像

dockerfile指令

FROM       # 基础镜像
MAINTAINER # 镜像是写的,姓名+邮箱
RUN        # 镜像构建的时候需要运行的命令
ADD        # 步骤:比如tomcat镜像。这个tomcat是压缩包!给webapps添加内容
WORKDIR    # 镜像工作目录
VOLUME     # 挂载的目录
EXPOSE     # 暴露端口配置
CMD        # 指定这个容器启动的时候运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候运行的命令,可以追加
ONBUILD    #触发指令
COPY       #类似ADD,将我们的文件拷贝到镜像中
ENV        #构建的时候设置环境变量
ARG        #docker --build-arg =来指定参数

[图片上传失败...(image-9de456-1603781473203)]

CMD 和 ENTRYPOINT 的区别

CMD 只有最后一个生效,可被替换——run的时候要把命令写完整,直接追加不行

ENTRYPOINT 可以直接追加——run的时候可以直接追加

发布镜像(类似git)

1.地址:dockerhub注册账号

2.登录 docker login -u xxx

3.提交镜像 docker push 名字/镜像:版本号

4.增加标签 docker tag 镜像id 名字/镜像:版本号

Docker网络

ip addr #查看网络命令

linux 可以ping 通 docker容器内部

原理

我们每启动一个docker容器,docker就会给docker容器分配一个ip,只要安装了docker,就会有一个网卡docker0。

桥接模式 使用的技术是evth-pair,充当一个桥梁,连接各种虚拟网络设备

成对出现,一段连着协议,一段连着彼此相连

网络模式

bridge:桥接(docker默认,自己创建也使用)

none:不配置网络

host:和宿主机共享网络

container:容器网络连通!(用得少,局限很大)

自定义网络

docker network ls            #查看所有docker的网络
docker network create --driver bridge  \
--subnet 192.168.0.0/16  \
--gateway 192.168.0.1 mynet      
                            #网关--subnet 192.168.0.0/16 
                            #路由器--gateway 192.168.0.1 mynet
docker network connect      #跨网络连通,比如192.168.0.1要连172.18.0.1

容器之间是可以互相ping通的,自定义的网络docker都已经帮我们维护好了对应的关系,推荐自定义网络!

你可能感兴趣的:(Docker整理)