docker笔记

使用个人版实例推送拉取Docker镜像_容器镜像服务(ACR)-阿里云帮助中心 (aliyun.com)

前提

入门

推送拉取镜像

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