docker实用教程 window启动失败原因
Docker概述docker 是用来解决环境配置复杂的问题,环境不兼容问题,方便运维打包镜像发布测试 一键运维Docker安装https://www.runoob.com/docker/docker-install-ubuntu.htmlwindow没有Hyper-V可以建立 文件名.cmd 吧下面的内容粘贴进去运行之后就有了镜像 image镜像就可以理解为模板 拿来就可以用容器 containe
Docker概述
docker 是用来解决环境配置复杂的问题,环境不兼容问题,方便运维
打包镜像发布测试 一键运维
Docker安装
https://www.runoob.com/docker/docker-install-ubuntu.html
安装启动失败原因
- 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
- wsl 版本太低
如果docker无法启动 需要更新一下 wsl
更新 wsl 下载
- 下面报错运行如下命令 管理员身份打开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 查看所有的镜像
- repository 镜像仓库源
- tag 镜像标签
- imace id 镜像id
- created 创建时间
- size 镜像大小
- 可选
- -a 可选参数 全部镜像
- -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
- 搜索镜像 docker search 镜像名
- 下载镜像 docker pull 镜像名
- 启动镜像
启动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
容器数据卷
使用数据卷
- 直接使用命令挂载 -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镜像的文件
- 编写dockerfile
- docker build 构建成镜像
- docker run 运行镜像
- 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
更多推荐
所有评论(0)