项目 | 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://download.docker.com/linux/centos/8/x86_64/stable/Packages/
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 packages
yum remove docker-ce docker-ce-cli containerd.io
2. 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-engine
step2 : 需要的安装包
[root@shell38 ~]# yum install -y yum-utils
step3:设置镜像仓库
------国外的不可取
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 fast
step4: 安装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 -r
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
...
...
[root@hell39 ~]# systemctl start docker
Failed to start docker.service: Unit not found.
[root@hell39 ~]# docker version
bash: docker: command not found...
1、docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。
2、docker利用的是宿主机的内核,而不需要Guest OS。
因此,当新建一个 容器时,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=10
docker 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/bash
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -rf
docker 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 65620cf42bca
2021-03-14T06:30:59.521575020Z leo
2021-03-14T06:31:01.524789667Z leo
[root@hell39 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65620cf42bca centos "/bin/bash -c 'while…" 6 minutes ago Up 6 minutes heuristic_blackwell
[root@hell39 ~]# docker top 65620cf42bca
UID PID PPID C STIME TTY TIME CMD
root 126257 126232 0 22:28 ? 00:00:00 /bin/bash -c while true; do echo leo ; sleep 2 ; done
root 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 ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65620cf42bca 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 65620cf42bca
leo
leo
后期使用-v 容器卷技术,实现自动同步
[root@65620cf42bca home]# touch a124.txt
[root@65620cf42bca home]# ls
a124.txt
[root@65620cf42bca home]# pwd
/home
[root@hell39 ~]# docker cp 65620cf42bca:/home/a124.txt /root
[root@hell39 ~]# ll
total 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 nginx
75943663c116f5ed006a0042c42f78e9a1a6a52eba66311666eee12e1c8a4502
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
75943663c116 nginx "nginx -g 'daemon of…" 41 seconds ago Up 40 seconds 0.0.0.0:82->80/tcp nginx00
➜ ~ curl localhost:3344 #测试
<!DOCTYPE html>,,,,
可以看到本地启动nginx成功了
leo测试是在aliyun上面进行的需要配置宿主机(阿里云)的3344端口开放
https://jingyan.baidu.com/article/92255446fe79bac51648f497.html
http://47.105.***.247:3344/ 可以看到网页正常运行
配置原理,见下图
---- 官方使用方式
docker run -it --rm tomcat:9.0
# 我们之前启动都是后台启动,停止了容器之后,容器还是可以查到,docker run -it --rm ,一般用来测试,用完就删除
---- 我们使用的方式
docker pull tomcat:9.0
docker images
-- 后台方式启动 tomcat:9.0 暴露3301端口
[root@aliyunleo ~]# docker run -d -p 3301:8080 --name tomcat01 tomcat:9.0
bdea6e54a521479aca14873eee537d996bc9f2361ac3ca8c5b947cd4c41322e5
[root@aliyunleo ~]# docker run -d -p 3301:8080 --name tomcat01 tomcat:9.0
bdea6e54a521479aca14873eee537d996bc9f2361ac3ca8c5b947cd4c41322e5
...
...
docker ps
新开一个terminal 访问
curl localhost:3355
docker exec -it tomcat9.0 /bin/bash
curl localhost:3355
此时没有相应,因为aliyun默认没有开发3355接口
docker exec -it tomcat9.0 /bin/bash —进入docker容器内
root@6f8537f04c25:/usr/local/tomcat/webapp# —webapp目录为空所以显示页面没有数据
root@6f8537f04c25:/usr/local/tomcat# cp -r webapps.dist/* webapps
将webapps.dist 目录下的文件copy到webapps目录下
# es 暴露的端口很多!
# es 十分耗内存
# es 的数据一般需要放置到安全目录!挂载
# --net somenetwork ? 网络配置
----------官方脚本-----------
# 下载 启动elasticsearch
docker 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.2
docker 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 stop 3f45535d8087 && docker rm 3f45535d8087
— 查看当前容器是否删除成功
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.2
docker 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 commit 提交容器成为一个新的副本
# 命令和git原理类似
docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]
# 1、启动一个默认的tomcat
docker 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 镜像