本文共 17491 字,大约阅读时间需要 58 分钟。
项目 | Value |
---|---|
https://blog.csdn.net/wei198621/article/details/109015732 | 狂神说Java-- Docker最新超详细版教程通俗易懂 --part01-- 安装docker 等 |
https://blog.csdn.net/wei198621/article/details/109072891 | 狂神说Java-- Docker最新超详细版教程通俗易懂 --part02-- 容器数据卷 等 |
https://blog.csdn.net/wei198621/article/details/109101495 | 狂神说Java-- Docker最新超详细版教程通俗易懂 --part03-- docker网络 等 |
https://blog.csdn.net/wei198621/article/details/114684423 | 狂神说Java-- Docker Dockerfile 制作tomcat镜像 并启动测试网站 |
https://www.bilibili.com/video/BV1og4y1q7M4?p=6 | 狂神说Java Docker最新超详细版教程通俗易懂 |
https://blog.csdn.net/xiaozecheng/article/details/106145593 | 狂神说Java 对应的文档在下面的目录 |
https://docs.docker.com/engine/reference/commandline/build/ | docker 官方命令 |
【狂神说Java】
源自:https://blog.csdn.net/xiaozecheng/article/details/106145593
项目 | Value |
---|---|
docker官网 | https://www.docker.com/ |
文档 | https://docs.docker.com/ Docker的文档是超级详细的! |
仓库国外 | https://hub.docker.com/ 用户名:gousheng8601 |
仓库国内 | ali… |
帮助命令 | ------------------------------------------ |
docker | version #显示docker的版本信息。 |
docker | info #显示docker的系统信息,包括镜像和容器的数量 |
docker 命令 --help | #帮助命令 |
镜像命令 | ------------------------------------------ |
docker images | #查看所有本地主机上的镜像 |
docker search | 搜索镜像 |
docker pull | 下载镜像 如: docker pull tomcat:8 |
docker rmi | 删除镜像 如: docker rmi -f 镜像id |
容器命令 | ------------------------------------------ |
docker container | 列出所有的容器指令 |
docker run | 镜像id 新建容器并启动 docker run -it centos /bin/bash |
docker ps | 列出所有运行的容器 docker container list |
docker rm | 容器id 删除指定容器 |
docker start | 容器id #启动容器 |
docker restart | 容器id #重启容器 |
docker stop | 容器id #停止当前正在运行的容器 |
docker kill | 容器id #强制停止当前容器 |
退出容器 | ------------------------------------------ |
exit | #容器直接退出 |
ctrl +P +Q | #容器不停止退出 |
删除容器 | ------------------------------------------ |
docker rm 容器id | #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf |
docker rm -f $(docker ps -aq) | #删除指定的容器 |
docker ps -a -q | xargs docker rm |
启动和停止容器的操作 | ------------------------------------------ |
docker start 容器id | #启动容器 |
docker restart 容器id | #重启容器 |
docker stop 容器id | #停止当前正在运行的容器 |
docker kill 容器id | #强制停止当前容器 |
常用其他命令 | ------------------------------------------ |
docker run -d centos | 后台启动命令 |
docker logs -ft 容器id | 查看日志 |
docker inspect 容器id | 查看镜像的元数据 方式1 如: docker inspect 86818f0765a8 |
docker image inspect 容器id | 查看镜像的元数据 方式2 如: docker image inspect diytomcat:1.1 |
docker exec -it 55321bcae33d /bin/bash | 进入当前正在运行的容器 |
docker cp 55321bcae33d:/java.java /root/ | (当容器根目录有java.java文件)从容器内拷贝到主机上 |
镜像快照 | ---------------------------- |
docker commit -a=“auth” -m=“haha” 容器id tomcat02:1.0 | 将操作过的容器通过commit调教为一个镜像 |
2010年 成立dotCloud 公司。
2013年,将docker开源。 2014年,docker 1.0 发布。 docker,十分轻巧。Docker 是基于Go 语言开发的,
项目 | Value |
---|---|
官网 | https://www.docker.com/ |
文档 | https://docs.docker.com |
库 | https://hub.docker.com |
容器化技术不是一个完整的操作系统。
DevOps
更快速的交付和部署 更便捷的升级和扩容 更简单的系统运维 更高效的计算机资源利用率
https://www.bilibili.com/video/BV1og4y1q7M4?p=6
镜像:(image) 镜像是模板,用于创建容器服务。
容器:(container) 通过镜像创建的一个或者一组应用。容器理解为一个简易的linux系统 仓库:(repository) 存放镜像的地方。Docker Hub / 阿里云 /
docker镜像就好比是一个目标,可以通过这个目标来创建容器服务,tomcat镜像==>run==>容器(提供服务器),通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的.
启动,停止,删除,基本命令 目前就可以把这个容器理解为就是一个简易的 Linux系统。仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库。(很类似git) Docker Hub是国外的。 阿里云…都有容器服务器(配置镜像加速!)https://download.docker.com/ ---- docke官网 的镜像
https://mirrors.aliyun.com/docker-ce/
https://docs.docker.com/engine/install/centos/
阿里服务器上面执行 yum 操作,不成功,
yum install docker-ce docker-ce-cli containerd.io 提示 “ Problem: package docker-ce-3:19.03.13-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed”版本不兼容
解决办法01
通过dnf 指令 制定版本 安装 具体的地址是从 https://download.docker.com 找到的制定版本 具体命令: dnf install https://download.docker.com/linux/centos/8/x86_64/stable/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-19.03.13-3.el8.x86_64.rpm dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-cli-19.03.13-3.el8.x86_64.rpm解决办法02
手动下载并安装, wget 网址 ; yum install 上一步下载的rpmbao方法一: 参考 https://blog.csdn.net/wei198621/article/details/114733994
此方法实践起来有问题,个别安装不上方法二: 自己找包(不推荐)
https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages//var/lib/docker 是docker默认的工作路径
1.Uninstall the Docker Engine, CLI, and Containerd packagesyum remove docker-ce docker-ce-cli containerd.io2. configuration files on your host are not automatically removed rm -rf /var/lib/docker rm -rf /var/lib/containerd
step1: 卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-enginestep2 : 需要的安装包[root@shell38 ~]# yum install -y yum-utilsstep3:设置镜像仓库------国外的不可取 yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo----国内的 使用阿里国内源安装docker yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo更新 yum 软件包索引yum makecache faststep4: 安装docker ce : 社区版 ee: 企业版 ----使用最新版会有问题,推荐用指定版本,yum install docker-ce docker-ce-cli containerd.io-----指定版本的 docker yum install docker-ce-17.03.1 docker-ce-cli-17.03.1 containerd.io---- 查看有哪些docker 版本yum list docker-ce --showduplicates | sort -rdocker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stabledocker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable......[root@hell39 ~]# systemctl start dockerFailed to start docker.service: Unit not found.[root@hell39 ~]# docker versionbash: docker: command not found...
1、docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
因此,当新建一个 容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引导、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载GuestOS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了这个复杂的过程,因此新建一个docker容器只需要几秒钟
#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io #2. 删除资源 rm -rf /var/lib/docker #/var/lib/docker 是docker的默认工作路径!帮助命令
docker version #显示docker的版本信息。 docker info #显示docker的系统信息,包括镜像和容器的数量 docker ** --help #帮助命令 帮助文档的地址: https://docs.docker.com/engine/reference/commandline/build/https://www.bilibili.com/video/BV1og4y1q7M4?p=9
镜像命令 docker images #查看所有本地主机上的镜像 可以使用docker image ls代替 docker search 搜索镜像 docker pull 下载镜像 docker image pull docker rmi 删除镜像 docker image rm容器基本命令
https://www.bilibili.com/video/BV1og4y1q7M4?p=10docker run [可选参数] image#参数--name=Name-d 后台方式运行-it 使用交互方式运行,进入容器查看内容-p 方式一: 方式一:ip:主机端口:容器端口 方式二:主机端口:容器端口 (常用) 方式三:容器端口 方式四:-P 随机执行端口
docker run -it centos /bin/bash
启动并进入centos主机exit #容器停止直接退出
ctrl + P +Q #容器不停止退出docker ps
docker run -it centos /bin/bashdocker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rfdocker rm -f $(docker ps -aq) #删除指定的容器docker ps -a -q|xargs docker rm #删除所有的容器docker ps -aq docker rm -f $(docker ps -aq)
docker start 容器id #启动容器docker restart 容器id #重启容器docker stop 容器id #停止当前正在运行的容器docker kill 容器id #强制停止当前容器
(以上 20201011 )
(以下 20201012 ) 日志、源数据、进程查看 https://www.bilibili.com/video/BV1og4y1q7M4?p=11-- docker run -d 镜像名 [root@hell39 ~]# docker run -d centos
-t : timestamp -f : follow--tail number : 要显示的日志的条数 [root@hell39 ~]# docker logs -f -t --tail 10 d535a3079834
示例: 后台开启一个 centos , 不断打印 Leo , 用docker logs 监控输出
[root@hell39 ~]# docker run -d centos /bin/bash -c "while true; do echo leo ; sleep 2 ; done"65620cf42bcad98e18a0b4f86fee79da5563b11688e2dfdcf2befba003b00275[root@hell39 ~]# docker logs -f -t --tail 10 65620cf42bca2021-03-14T06:30:59.521575020Z leo2021-03-14T06:31:01.524789667Z leo
[root@hell39 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES65620cf42bca centos "/bin/bash -c 'while…" 6 minutes ago Up 6 minutes heuristic_blackwell[root@hell39 ~]# docker top 65620cf42bcaUID PID PPID C STIME TTY TIME CMDroot 126257 126232 0 22:28 ? 00:00:00 /bin/bash -c while true; do echo leo ; sleep 2 ; doneroot 129899 126257 0 22:35 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 2[root@hell39 ~]#
docker inspect 容器ID
[root@hell39 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES65620cf42bca centos "/bin/bash -c 'while…" 9 minutes ago Up 9 minutes heuristic_blackwell[root@hell39 ~]# docker inspect 65620cf42bca.... 很多的。。。
docker exec -it ID /bin/bash
docker attach ID进入容器,新开启一个窗口
[root@hell39 ~]# docker exec -it d535a3079834 /bin/bash
进入容器,进入正在运行的命令行,而不是新开启一个窗口
[root@hell39 ~]# docker attach 65620cf42bcaleoleo
后期使用-v 容器卷技术,实现自动同步
[root@65620cf42bca home]# touch a124.txt[root@65620cf42bca home]# lsa124.txt[root@65620cf42bca home]# pwd/home
[root@hell39 ~]# docker cp 65620cf42bca:/home/a124.txt /root[root@hell39 ~]# lltotal 12-rw-r--r--. 1 root root 0 Mar 13 22:54 a124.txt......
attach Attach local standard input, output, and error streams to a running container #当前shell下 attach连接指定运行的镜像 build Build an image from a Dockerfile # 通过Dockerfile定制镜像 commit Create a new image from a container's changes #提交当前容器为新的镜像 cp Copy files/folders between a container and the local filesystem #拷贝文件 create Create a new container #创建一个新的容器 diff Inspect changes to files or directories on a container's filesystem #查看docker容器的变化 events Get real time events from the server # 从服务获取容器实时时间 exec Run a command in a running container # 在运行中的容器上运行命令 export Export a container's filesystem as a tar archive #导出容器文件系统作为一个tar归档文件[对应import] history Show the history of an image # 展示一个镜像形成历史 images List images #列出系统当前的镜像 import Import the contents from a tarball to create a filesystem image #从tar包中导入内容创建一个文件系统镜像 info Display system-wide information # 显示全系统信息 inspect Return low-level information on Docker objects #查看容器详细信息 kill Kill one or more running containers # kill指定docker容器 load Load an image from a tar archive or STDIN #从一个tar包或标准输入中加载一个镜像[对应save] login Log in to a Docker registry # logout Log out from a Docker registry logs Fetch the logs of a container pause Pause all processes within one or more containers port List port mappings or a specific mapping for the container ps List containers pull Pull an image or a repository from a registry push Push an image or a repository to a registry rename Rename a container restart Restart one or more containers rm Remove one or more containers rmi Remove one or more images run Run a command in a new container save Save one or more images to a tar archive (streamed to STDOUT by default) search Search the Docker Hub for images start Start one or more stopped containers stats Display a live stream of container(s) resource usage statistics stop Stop one or more running containers tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE top Display the running processes of a container unpause Unpause all processes within one or more containers update Update configuration of one or more containers version Show the Docker version information wait Block until one or more containers stop, then print their exit codes
#1. docker search nginx 搜索镜像 search 建议大家去docker搜索,可以看到帮助文档#2. docker pull nginx 拉取镜像 pull#3、运行测试# -d 后台运行# --name 给容器命名# -p 宿主机端口:容器内部端口➜ ~ docker run -d --name nginx00 -p 3344:80 nginx75943663c116f5ed006a0042c42f78e9a1a6a52eba66311666eee12e1c8a4502➜ ~ docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES75943663c116 nginx "nginx -g 'daemon of…" 41 seconds ago Up 40 seconds 0.0.0.0:82->80/tcp nginx00➜ ~ curl localhost:3344 #测试,,,,可以看到本地启动nginx成功了leo测试是在aliyun上面进行的需要配置宿主机(阿里云)的3344端口开放https://jingyan.baidu.com/article/92255446fe79bac51648f497.htmlhttp://47.105.***.247:3344/ 可以看到网页正常运行 配置原理,见下图
---- 官方使用方式 docker run -it --rm tomcat:9.0# 我们之前启动都是后台启动,停止了容器之后,容器还是可以查到,docker run -it --rm ,一般用来测试,用完就删除
---- 我们使用的方式 docker pull tomcat:9.0docker images-- 后台方式启动 tomcat:9.0 暴露3301端口 [root@aliyunleo ~]# docker run -d -p 3301:8080 --name tomcat01 tomcat:9.0bdea6e54a521479aca14873eee537d996bc9f2361ac3ca8c5b947cd4c41322e5[root@aliyunleo ~]# docker run -d -p 3301:8080 --name tomcat01 tomcat:9.0bdea6e54a521479aca14873eee537d996bc9f2361ac3ca8c5b947cd4c41322e5......docker ps 新开一个terminal 访问 curl localhost:3355 docker exec -it tomcat9.0 /bin/bashcurl localhost:3355此时没有相应,因为aliyun默认没有开发3355接口
root@6f8537f04c25:/usr/local/tomcat# cp -r webapps.dist/* webapps
将webapps.dist 目录下的文件copy到webapps目录下# es 暴露的端口很多!# es 十分耗内存 # es 的数据一般需要放置到安全目录!挂载# --net somenetwork ? 网络配置----------官方脚本-----------# 下载 启动elasticsearchdocker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2# 测试一下es是否成功启动➜ ~ curl localhost:9200#关闭,添加内存的限制,修改配置文件 -e 环境配置修改➜ ~ docker rm -f d73ad2f22dd3----限制使用内存大小方式启动es ➜ ~ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2docker stats ----查看docker 的内存 CPU 占用情况 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2[root@aliyunleo ~]# curl localhost:9200{ "name" : "0e5912548083", "cluster_name" : "docker-cluster", "cluster_uuid" : "acuL70xEQrC0h0YoinKs4w", "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"}
es 暴露很多端口
es 十分耗费内存 es 数据需要放置到安全目录 –net somenetwork ---- 网络配置以后讲-- 从hub.docker.com 官网上面取到的原始数据是这个 $ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag //启动elasticsearch 代码 //–net somenetwork ---- 网络配置以后讲,删除它 $ docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2 docker ps -a --- 查看有哪些运行的镜像(包含已经stop的) docker stop *** docker rm *** //修改配置文件 -e 环境配置 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
— 删除当前容器
— 查看当前容器是否删除成功
docker ps -a//修改配置文件 -e 环境配置
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2docker ps
curl localhost:9200 – 验证网站是否运行
网页方式验证
docker 的图形化界面管理面板
docker run -d -p 8080:9000 \--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer//简化相当于 当前宿主机端口 8080 映射 container 9000 端口docker run -d -p 8080:9000 *** portainer/portainer// 安装完成后 运行 如下指令查看是否 安装成功curl localhost:8080// 开通aliyun 8080 端口 // 网页访问
获取镜像方式
1.下载 2.从朋友处获取 3.自己制作一个 用 DockerFile
UnionFS 联合文件系统
bootfs: 包括Kernel 的最底层的文件系统 ,当系统加载完成,会卸载bootfs
rootfs: 是不同的系统发行版本如centos,ubuntu 等
docker image inspect redis
docker commit 提交容器成为一个新的副本# 命令和git原理类似docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
# 1、启动一个默认的tomcatdocker run -d -p 8080:8080 tomcat# 2、发现这个默认的tomcat 是没有webapps应用,官方的镜像默认webapps下面是没有文件的!docker exec -it 容器id# 3、拷贝文件进去# 4、将操作过的容器通过commit调教为一个镜像!我们以后就使用我们修改过的镜像即可,这就是我们自己的一个修改的镜像。docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]docker commit -a="kuangshen" -m="add webapps app" 容器id tomcat02:1.0
-------------------------- 详细过程 ----------------------------docker images docker run -it -p 8080:8080 tomcat -- 启动一个镜像 docker ps docker exec -it 容器id /bin/bash cd webapps -- 查看当前目录无数据 cd ../webaps.dist --- 当前目录有数据 cd .. cp -r webapps.dist/* webapps //--- 将 webapps.dist 目录下的文件copy到目录 webapps */cd webapp ls ------ 已经有数据了 docker commit -a="leo" -m="add webapps app" containerID 自定义name docker commit -a="leo" -m="add webapps app" 893487 tomcat_leo:1.1 docker images -- 看到 有 tag 为1.2 的tomcat 镜像