docker笔记

前提
入门
推送拉取镜像
docker login --username=<``ceshi``> registry.cn-<``c`hengdu`>.aliyuncs.com看镜像 docker images
卸载docker1.依赖2.资源
1.Yum remove docker-ce docker-ce-cli containerd.io
2.rm -rf /var/lib/docker
学会help
命令—help
镜像命令
docker pull xxxxxxx
查看镜像
docker imgaes

搜索镜像
docker search mysql
下载镜像
docker pull
删除镜像
docker rmi id
容器命令
有了镜像才可以用容器
创建容器
docker pull centos #容器名称
Docker 进入容器
进入容器:docker run -it centos /bin/bash
-it #进入容器内部
centos #镜像名称
/bin/bash #启动方式
列出容器
docker ps
可以加 -a 可以看到运行过的容器
退出容器
退出容器:exit #退出不保留容器运行
Ctrl +P+Q 退出但是不停止
删除容器
docker rm centos
停止启动容器操作
启动和停止容器的操作
docker start 容器id # 启动容著
docker restart 容器id # 重后容器
docker stop 容器id #停止当前正在通行的容器
docker ki11 容器id # 强制停止当前容器
容器日志打印
测试:docker logs (容器id已经可以看日志了)可以加--tail +数字+(容器id)
docker logs --tail 10 id
docker logs id
容器内进程查看#一个脚本
docker top id
1.PID:进程的 ID(Process ID),这是操作系统分配给每个进程的唯一标识符。
2.USER:运行该进程的用户。
3.TIME:进程使用的 CPU 时间,通常以分钟和秒的格式显示。
4.COMMAND:启动该进程的命令及其参数。

查看容器的信息!!!
Docker 容器信息:docker inspect+id
进入当前运行的容器
docker exec -it id /bin/bash命令cp : docker cp [容器id] :容器内路径 容器外的目的地[root@iZ2vchs5w1q37vv5spc5pqZ home]# docker cp 16b2907b815a:/home/ceshi.java /home
Successfully copied 1.54kB to /home
[root@iZ2vchs5w1q37vv5spc5pqZ home]# ls
ceshi.java liulei.java www
NginxDocker search nginx --搜索nginx版本Nginx 镜像下载 docker pull nginx
Nginx创建容器Docker run -d --name nginx01 -p 3344:80 nginx
-d 后台运行
--name 指定名称为nginx01
-p 指定端口 3344 (80是默认的端口3344是映射端口)测试端口:curl localhost:3344
访问服务:ip + 3344
Tomcat容器服务
官网测试命令 docker run -it --rm tomcat:9.0
测试用完自动销毁拉镜像:docker pull tomcat
创建容器:docker run -it -d -p 4455:8080 tomcat
端口映射4455
访问测试:ip+8080!!!!!失败了* *原因:没有配置文件:因为下载的Tomcat是被阉割了,只有核心的灵魂
Tomcat配置文件root@5fbfd47335d7:/usr/local/tomcat# cp -r webapps.dist/* webapps复制配置文件
测试访问 ip + 4455
部署es+kibana
部署es+kibana
网址
启动:$ docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
\#--net somenetwork --网络配置
------------------
运行及卡死
所以!!!!!!
Docker 查看查看内存 :docker stats
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "ES_JAVA_OPTS=-Xms64m -Xmx512m" elasticsearch:7.6.2
-e "ES_JAVA_OPTS=-Xms64m -Xmx512m" #配置
快的让你害怕,恍如隔世
测试:
Docker 网络原理
可视化Portainer容器界面
Portainer
命令:docker run -d -p 8080:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
账号:admin
密码:123ll.测试http:/自己的ip:8088
——————————————————————————-
Docker镜像
docker镜像是什么

docker 加速,为啥快?
创建自己的镜像
[root@iZ2vchs5w1q37vv5spc5pqZ ~]# docker commit -a="liulei" -m="add webapps app" 9dac666cbb2b tomcat02:1.
-a:名字
-m:说明
精通
容器数据卷:
数据卷使用:
命令:docker run -it -v /home/ceshi1:/home centos /bin/bash
Docker inspect id---查看挂载注意点:
1.容器只要存在数据就会同步(运行状态无关)
2.自动备份
安装mysql
Docker pull mysql:5.7
启动:mysql 密码123456
[root@iZ2vchs5w1q37vv5spc5pqZ ~]# docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
挂载:具名挂载匿名挂载
初识Dockerfile
过程
脚本
—-脚本中的form 改为fromdocker build -f /home/docker-test-volume/dockerfilel -t liulei/centos:1.0 . –创建镜像
测试
挂载的数据卷目录
数据同步,–容器互相挂载
Dockerfile介绍
Dockerfile构建过程
创建自己的镜像 cd /home
mkdir dockerfile
cd /dockerfile
vim mydockerfile-centos #镜像脚本
-------------------------
脚本:
FROM centos #基于什么镜像
MAINTAINER liulei<2543770337@qq.com> #这个镜像的声明,刘磊 邮箱***
ENV MYPATH /usr/local #镜像创建的容器 工作目录为****
WORKDIR $MYPATH 作用:WORKDIR 指令用于设置工作目录。后续的 RUN、CMD、ENTRYPOINT、COPY 和 ADD 指令都将在这个目录下执行。
环境变量:$MYPATH 是一个环境变量,表示你希望设置的工作目录的路径。你需要在 Dockerfile 中先定义这个环境变量,通常使用 ENV 指令。 效果:当你设置了 WORKDIR $MYPATH 后,所有后续的命令都会在 /path/to/directory 目录下执行。
RUN yum -y install vim #整个镜像是干什么的
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH 作用:CMD 指令用于指定容器启动时要执行的命令。它可以被 docker run 命令中的参数覆盖。
环境变量:在 CMD 中使用 $MYPATH,表示在容器启动时会输出这个环境变量的值。
效果:当你运行这个容器时,echo $MYPATH 会输出环境变量 MYPATH 的值。如果 MYPATH 没有被定义,输出将为空。
CMD echo "-------end-------"
CMD /bin/bash 控制台
------------------------
开始构建
docker build -f mydockerfile-centos -t mycentos:0.1 . --no-cache
-f #来自那个文件
-t #镜像名称和版本号
!后面有个点 “.” !
!!!!!!!!!!!!!!!!!!!!!!!!1
如果报错这个说明是2022年之后的centos的7版本已经停止运维,最新版本是centos:8的,执行yum 根据docker 镜像中的yum 源配置来获取的并非宿主机的配置,所以需要手动先把正确的centos 7 yum 配置文件拷贝到容器目录下。
操作步骤如下:
cd /home/dockerfile 进入目录,依次执行下列两条命令将centos7 的yum源配置文件下载到当前目录
wget http://mirrors.aliyun.com/repo/epel-7.repo
wget http://mirrors.aliyun.com/repo/Centos-7.repo
修改 mydockerfile-centos 文件,在yum 命令之前添加配置,完整的配置内容如下
FROM centos:7
MAINTAINER liulei<2543770337@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN rm -rf /etc/yum.repos.d/*
COPY ./* /etc/yum.repos.d/
RUN yum-config-manager --enable base
RUN yum-config-manager --enable extras
RUN yum-config-manager --enable updates
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-------end-------"
CMD /bin/bash
部署tomcat镜像
1.首先要有基础系统压缩包
[root@iZ2vchs5w1q37vv5spc5pqZ tomcat]# ll
total 154136
-rw-r--r-- 1 root root 10929702 Sep 21 19:21 apache-tomcat-9.0.22.tar.gz
-rw-r--r-- 1 root root 146902735 Sep 24 01:42 jdk-8u411-linux-x64.tar.gz
2.帮助文档
touch readme.txt
3.写脚本
vim dockerfile
#####################
FROM centos:7
MAINTAINER liulei<2543770337@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u411-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.22.tar.gz /usr/local/
RUN rm -rf /etc/yum.repos.d/*
COPY ./* /etc/yum.repos.d/
RUN yum-config-manager --enable base
RUN yum-config-manager --enable extras
RUN yum-config-manager --enable updates
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_411
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CLASSPATH_HOME /usr/local/apache-tomcat-9.0.22
ENV CLASSPATH_BASH /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
~
~
4.启动命令 docker build -t mytomcat .
5.报错 同上
1.更新源 yum
wget http://mirrors.aliyun.com/repo/epel-7.repo
wget http://mirrors.aliyun.com/repo/Centos-7.repo
2.进入脚本 vim上面加
RUN rm -rf /etc/yum.repos.d/*
COPY ./* /etc/yum.repos.d/
RUN yum-config-manager --enable base
RUN yum-config-manager --enable extras
RUN yum-config-manager --enable updates
6.查看:
[root@iZ2vchs5w1q37vv5spc5pqZ tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat latest 9511381f1604 2 minutes ago 1.1GB
7.启动
docker run -d -p 9090:8080 --name liuleitomcat -v /usr/home/liulei-tomcat/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/liulei-tomcat/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs diytomcat:1.0
#参数解释如下
-d: 以分离模式(后台模式)运行容器。
-p 9090:8080: 将主机的 9090 端口映射到容器的 8080 端口。这意味着你可以通过访问 http://<主机IP>:9090 来访问容器内的 Tomcat 服务。
--name liuleitomcat: 为容器指定一个名称 liuleitomcat,方便后续管理。
-v /usr/home/liulei-tomcat/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test: 将主机的 /usr/home/liulei-tomcat/build/tomcat/test 目录挂载到容器内的 /usr/local/apache-tomcat-9.0.22/webapps/test 目录。这通常用于将应用程序 WAR 文件或其他资源放入 Tomcat 的 webapps 目录。(记得tomcat下要有test目录)
-v /home/liulei-tomcat/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.0.22/logs: 将主机的 /home/liulei-tomcat/build/tomcat/tomcatlogs/ 目录挂载到容器内的 /usr/local/apache-tomcat-9.0.22/logs 目录。这用于将 Tomcat 的日志文件保存到主机上,方便查看和管理。
diytomcat: 这是要使用的 Docker 镜像的名称。
8.进入容器
[root@iZ2vchs5w1q37vv5spc5pqZ tomcat]# docker exec -it liuleitomcat /bin/bash
9.检测容器端口
curl http://localhost:9090
10.测试
ip +9090
如果报错请检查目录和容器内的java配置路径到变量
11. 外部发行
[root@iZ2vchs5w1q37vv5spc5pqZ tomcat]# cd test/
[root@iZ2vchs5w1q37vv5spc5pqZ test]# ls
[root@iZ2vchs5w1q37vv5spc5pqZ test]# pwd
/home/liulei-tomcat/build/tomcat/test
[root@iZ2vchs5w1q37vv5spc5pqZ test]# mkdir WEB-INF
[root@iZ2vchs5w1q37vv5spc5pqZ WEB-INF]# ls
[root@iZ2vchs5w1q37vv5spc5pqZ WEB-INF]# vim web.xml
写入:<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
</web-app>
[root@iZ2vchs5w1q37vv5spc5pqZ WEB-INF]# ls
web.xml
[root@iZ2vchs5w1q37vv5spc5pqZ WEB-INF]# cd ..
[root@iZ2vchs5w1q37vv5spc5pqZ test]# ls
WEB-INF
[root@iZ2vchs5w1q37vv5spc5pqZ test]# vim index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>hello.liulei</title>
</head>
<body>
Hello World!<br/>
<%
out.println("你的 IP 地址 " + request.getRemoteAddr());
%>
</body>
</html>
测试
http://47.109.176.89:9090/test/index.jsp
docker 网络
网卡
IP addr
#出现多个网卡
如下
9419: veth0b170af@if9418: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 56:df:ad:12
:9b:1e brd ff:ff:ff:ff:ff:ff link-netnsid 3
inet6 fe80::54df:adff:fe12:9b1e/64 scope link
valid_lft forever preferred_lft forever
其中9419:9418这是一对的
网络技术和 –link
#docker容器中
IP addr 就是 9418
#这样的情况就是技术evth-pair技术了
ping 可以打通容器外服务器和容器内部连接成功了
#同时!容器和容器可以ping
docker run -d -p id ping id
报错
所以加上 --link就可以了#这是单项的
自定义网络
#docker网络都是虚拟的
docker inspect id
可以看hosts
docker exec -it tomcat03 cat /etc/hosts
docker 网络分析
自定义网络
[root@iZ2vchs5w1q37vv5spc5pqZ ~]# docker network ls
NETWORK ID NAME DRIVER SCOPE
ac132479deff bridge bridge local
cd7f96bb3e1e host host local
0f3ae298f187 none null local
#bridge :桥接模式如:3-->2 可以是3-->1-->2
#none:不配置网络
#host :和主机共享网络
#container :容器网络连接(少用!局限性较强)
#实践内容:docker network inspect id
网络连接
#容器和容器网络连接
#首先不可能直接上去,ip网段不同谁来了也不行但是可以
mynet,再给一个ip
docker mynet --help
docker network connect id mynet tomcat01
#!一个容器俩个ip#这他妈的是分裂也
集群脚本部署
for port in $(seq 1 6); \
do \
mkdir -p /mydata/redis/node-${port}/conf
touch /mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
spring boot发布项目
idea先下载docker服务
1.写微服务代码
#注意要本地把.jar跑一遍
#写docker file
