Docker概述

docker 是用来解决环境配置复杂的问题,环境不兼容问题,方便运维
打包镜像发布测试 一键运维

Docker安装

https://www.runoob.com/docker/docker-install-ubuntu.html

安装启动失败原因

  1. window没有Hyper-V 可以建立 文件名.cmd 吧下面的内容粘贴进去运行之后就有了
    到最后会输入 y 会重启所以要提前保存好文件
pushd "%~dp0"
dir /b %SystemRoot%\servicing\Packages\*Hyper-V*.mum >hyper-v.txt
for /f %%i in ('findstr /i . hyper-v.txt 2^>nul') do dism /online /norestart /add-package:"%SystemRoot%\servicing\Packages\%%i"
del hyper-v.txt
Dism /online /enable-feature /featurename:Microsoft-Hyper-V-All /LimitAccess /ALL
  1. wsl 版本太低

如果docker无法启动 需要更新一下 wsl
更新 wsl 下载

  1. 下面报错运行如下命令 管理员身份打开cmd

netsh winsock reset

在这里插入图片描述

镜像 image

镜像就可以理解为模板 拿来就可以用

容器 container

就是一个独立的系统 里面包含自己项目内容 或者其他的环境配置 比如mysql

仓库repository

下载镜像的地址 国内多用阿里巴巴的地址
修改如下图所示 修改完重启docker 避免不生效
在这里插入图片描述

{
  "registry-mirrors": ["https://xaiqlt1z.mirror.aliyuncs.com"],
  "insecure-registries": [],
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  }
}

Docker命令

docker version 
docker info  #显示docker系统信息
docker 命令  --help # 帮助命令

镜像命令

docker images

  • -a 查看所有的镜像
    1. repository 镜像仓库源
    2. tag 镜像标签
    3. imace id 镜像id
    4. created 创建时间
    5. size 镜像大小
      在这里插入图片描述
  • 可选
    1. -a 可选参数 全部镜像
    2. -q 只显示镜像id

docker search 搜搜镜像

在这里插入图片描述
在这里插入图片描述

#可选参数 -f 过滤
-f=STARS

在这里插入图片描述

docker pull 下载

Options:
  -a, --all-tags         下载全部       Download all tagged images in the repository
      --disable-content-trust   Skip image verification (default true)
      --platform string         Set platform if server is multi-platform
                                capable
  -q, --quiet                   Suppress verbose output 不输出下载进度

下载指定版本
docker pull mysql:5.7.30

docker rmi 删除镜像

docker rmi  -f  id号  删除一个
docker rmi  -f  id号  删除多个
docker rmi -f $(docker images -aq) 删除全部

容器命令

docker pull centos

新建容器启动

docker run [可选参数] image
# 参数容器
--name="name"  容器名字 用来区分容器
-d 后台方式运行
-it 使用交互方式运行 进入容器的意思
-p 指定端口  主机端口:容器端口
			容器端口不向外映射
-P 随即指用端口

docker run -it centos
运行centos 进入容器

PS D:\工作> docker run -it centos
[root@93e860bd4082 /]#   

推出命令 exit

列出所有运行的命令

docker ps -a 现实所有运行的容器
-n=# 显示最近运行的容器 ? 显示数量
-q #只显示容器编号

推出容器

exit #推出并且停止
ctrl +p +q #不停止推出

删除容器

docker rm 容器id

启动和停止容器的操作

docker start id
docker restart id
docker stop id
docker kill id

常用命令

后台启动容器 ,后台运行必须有前台进程不然就会退出

# -d 容器名
docker run -d centos

查看日志

 docker logs 3815a5f8e694

查看容器进程信息

 docker top 3815a5f8e694

查看容器信息

 docker inspect 3815a5f8e694

进入容器

# 打开新的 界面
docker exec -it 容器id
# 打开当前界面
 docker attach 3815a5f8e694

复制容器内文件到主机

docker cp 容器id:容器内路径   目的的主机路径·
查看容器占主机使用情况
docker stats 容器id

在这里插入图片描述### 整合练习
安装nginx

  1. 搜索镜像 docker search 镜像名
  2. 下载镜像 docker pull 镜像名
  3. 启动镜像

启动nginx -d 后台运行 名字是 nginxweb 主机端口3001映射到容器的80 端口 镜像名
docker run -d --name nginxweb -p 3001:80 nginx
在这里插入图片描述

安装elasticsearch

 docker run -d --name elasticsearch  -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

访问 127.0.0.1:9200

{
 "name" : "6a4d8d24d52d",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "dNR04oCXSgejUxTAbW1_iQ",
 "version" : {
   "number" : "7.6.2",
   "build_flavor" : "default",
   "build_type" : "docker",
   "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
   "build_date" : "2020-03-26T06:34:37.794943Z",
   "build_snapshot" : false,
   "lucene_version" : "8.4.0",
   "minimum_wire_compatibility_version" : "6.8.0",
   "minimum_index_compatibility_version" : "6.0.0-beta1"
 },
 "tagline" : "You Know, for Search"
}

在这里插入图片描述

commit镜像 提交镜像

docker commit # 提交容器成为一个新副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag版本]
docker commit -a="llt" -m="初始化html"  f32c7e68c569 tomcatllt:1.0   

在这里插入图片描述

容器数据卷

使用数据卷

  1. 直接使用命令挂载 -v
docker run -it -v 主机目录:容器目录
docker run -it -v D:\phpstudy_pro\home:/home centos /bin/bash

实战mysql

# -d 后台运行 -p 端口映射 -v 文件映射可以多个-v -e环境配置 这里配置密码
docker run -d -p 3310:3306 -v D:\phpstudy_pro\mysql\conf:/etc/mysql/conf.d -v D:\phpstudy_pro\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7

具名挂载与匿名挂载

# 具名挂载
 docker run -d -p 3301:80 --name nginx2 -v nginx2llt:/etc/nginx nginx
 [
    {
        "CreatedAt": "2020-12-24T09:38:55Z",
        "Driver": "local",
        "Labels": null,
        # 挂载的主机地址
        "Mountpoint": "/var/lib/docker/volumes/nginx2llt/_data",
        "Name": "nginx2llt",
        "Options": null,
        "Scope": "local"
    }
]
# 匿名挂载
 docker run -d -p 3301:80 --name nginx2 -v /etc/nginx nginx

DockerFile

体验
写一个脚本通过脚本可以生成镜像

FROM centos
# 挂载文件 这是匿名挂载
VOLUME ["volume01","volume02"]
CMD echo "------end------"
CMD /bin/bash

打包

docker build -f F:\myProject\initWeb\dist_electron\dockertext01\dockerfile01 -t llt/centos:1.0 .

数据卷容器

容器同步卷 数据共享参数 --volumes-from

#运行 dockervolume03  与 CONTAINER ID是  19bf91bd4809  共享数据卷
 docker run --name dockervolume03 --volumes-from  19bf91bd4809  -it 18f677c53652 /bin/bash

mysql 数据同步

docker run -d -p 3310:3306 -v D:\phpstudy_pro\mysql\conf:/etc/mysql/conf.d -v D:\phpstudy_pro\mysql\data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7 --name mysql01

docker run -d -p 3310:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql01 mysql:5.7    --volumes-from mysql01

dockerfile 是用来构建docker镜像的文件

  1. 编写dockerfile
  2. docker build 构建成镜像
  3. docker run 运行镜像
  4. docker push 发布镜像 dockerhub 阿里云镜像仓库
    dockerfile指令
from  基础镜像
maintainer 维护者信息 姓名+邮箱
run 运行
add copy文件 会自动解压 例如tomcat  添加tomcat 压缩包
workdir  设置工作目录  
volume 设置卷
expose 指定对外端口
run  运行
cmd #这个容器启动要执行的命令 只有最后一个会生效 可被替代
entrypoint #这个容器启动要执行的命令
onbuild #当构建一个被继承 dockerfile
copy # 类似add
env #设置构建环境变量

创建自己的centos

#编写 dockerfile 文件
FROM centos  #基础centos
MAINTAINER llt<229236940@qq.com>  #作者信息
ENV MYPATH /usr/local  #初始化路径
WORKDIR $MYPATH  #工作目录
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "--------end------"
CMD /bin/bash
#构建镜像 docker build
docker build -f ./mydockerfile-centos  -t mycentos:0.1 .

ENV MYPATH /usr/local #初始化路径 这里对应下面截图

在这里插入图片描述

查看历史构建步骤

在这里插入图片描述

cmd 和 entrypoint 区别

cmd #这个容器启动要执行的命令 只有最后一个会生效 可被替代
cmd 无法在 docker run -it a64ca6f63548 后面添加命令
entrypoint #这个容器启动要执行的命令
entrypoint 可以 docker run -it a64ca6f63548 后面添加命令
docker run -it a64ca6f63548

创建tomcat

FROM centos
MAINTAINER llt<229236940@qq.com>
COPY  readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.41-src.tar.gz /usr/local/
ADD jdk-8u60-linux-x64.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_60
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.41-src
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.41-src
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD   /usr/local/apache-tomcat-9.0.41-src/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.41-src/bin/logs/catalina.out
#构建
docker build -t diytomcat02 .
#运行
docker run -d -p 9090:8080 --name llttom -v F:\办公公司\work\dockerDemo\llt_tomcat\test:/usr/local/apache-tomcat-9.0.22/webapps/test  -v  F:\办公公司\work\dockerDemo\llt_tomcat\logs\:/usr/local/apache-tomcat-9.0.22/logs  18ec45d4a585

Docker网络原理

link指令不建议使用这里就不给例子了 因为连接有坑
创建网络

#创建名为lltnet的网络 -d 选择网络类型 bridge桥连接
 docker network create -d bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 lltnet
 #查看网络 信息
 docker network inspect lltnet
 #查看所有网络
 docker network ls
 #运行创建tomcat镜像 选择网络 lltnet 这样子创建的docker在同网段可以连接
 docker run -d -P --name tomcatnet01 --net lltnet tomcat

修改docker网段

环境如下 俩自定义网段 俩默认网段 要求默认网段连接自定义网段

PS F:\办公公司\work\dockerDemo\dockerfile> docker ps -a
CONTAINER ID   IMAGE     COMMAND             CREATED          STATUS                       PORTS                     NAMES
4cb4a5fd971a   tomcat    "catalina.sh run"   22 minutes ago   Exited (255) 9 minutes ago   0.0.0.0:49156->8080/tcp   tomcatnet02
a8cfa995ecad   tomcat    "catalina.sh run"   22 minutes ago   Exited (255) 9 minutes ago   0.0.0.0:49155->8080/tcp   tomcatnet01
PS F:\办公公司\work\dockerDemo\dockerfile> docker run -d -P --name tomcatnet1 tomcat
5d5737430ce07d0f5a922d5864365623e0d9ce92cf6478c8afa4554f4ba88221
PS F:\办公公司\work\dockerDemo\dockerfile> docker run -d -P --name tomcatnet2 tomcat
61f1904e369855a6b50bf8576f3d0a48b1150d48e02710c28afd9e5a083535c7
PS F:\办公公司\work\dockerDemo\dockerfile>

给tomcatnet1 添加到 lltnet 网络

 docker network connect lltnet tomcatnet1

IDEA整合Docker

Docker Compose

Docker Swarm

CI\CD jenkins

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐