Docker容器学习
一、Docker的概述
1、Docker的三个文件
二、Docker的安装
查看系统环境
[root@localhost ~]# uname -r
3.10.0-1127.el7.x86_64
[root@localhost ~]# cat /etc/os-release
NAME=“CentOS Linux”
VERSION=“7 (Core)”
ID=“centos”
ID_LIKE=“rhel fedora”
VERSION_ID=“7”
PRETTY_NAME=“CentOS Linux 7 (Core)”
ANSI_COLOR=“0;31”
CPE_NAME=“cpe:/o:centos:centos:7”
HOME_URL=“https://www.centos.org/”
BUG_REPORT_URL=“https://bugs.centos.org/”
CENTOS_MANTISBT_PROJECT=“CentOS-7”
CENTOS_MANTISBT_PROJECT_VERSION=“7”
REDHAT_SUPPORT_PRODUCT=“centos”
REDHAT_SUPPORT_PRODUCT_VERSION=“7”
安装文档:
1、卸载旧版本
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
2、需要的安装包
yum install -y yum-utils
3、设置镜像仓库
不要安装国外的,
安装阿里云的镜像
yum-config-manager
–add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4、安装Docker相关的内容
更新一下yum
yum makecache fast
docker-ce是社区版 docker-ee是企业版的
yum install docker-ce docker-ce-cli containerd.io
5、启动Docker
systemctl start docker
[root@localhost ~]# systemctl start docker
[root@localhost ~]# docker version 查看版本
Client: Docker Engine - Community
Version: 20.10.7
API version: 1.41
Go version: go1.13.15
Git commit: f0df350
Built: Wed Jun 2 11:58:10 2021r
Experimental: true
6、启动Docker的Helloworld并添加阿里云加速器
docker run hello-world
如果出现问题,既是没有添加阿里云的加速器
1.Docker安装完成后测试docker run hello-world出现一下问题:
异常原因 “registry-mirrors”: [“https://registry.docker-cn.com”]
添加阿里云加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-‘EOF’
{
“registry-mirrors”: [“https://8y3pmd9k.mirror.aliyuncs.com”]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run hello-world
7、查看Helloworld镜像
docker images
8、卸载Docker
卸载依赖:
yum remove docker-ce docker-ce-cli containerd.io
删除资源:
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
三、Run执行流程和Docker原理
1、docker run hellowold执行流程
docker查找本地是否有这个镜像,如果有直接运行,没有就在dockerHub上拉去下载这个镜像
2、Docker底层原理
四、Docker的常用命令
1、帮助命令
docker version 查docker版本信息
docker info 查看详细信息
docker --help
2、镜像命令
docker images 查看所有镜像
3、容器命令
进入容器后退出
[root@c81786ecb415 /]# exit
exit
[root@localhost /]#
查看正在运行的容器
docker ps
查看历史运行容器
docker ps -a
docker ps -aq 显示所有的容器id
[root@localhost /]# docker ps -aq
c81786ecb415
6bd16897b073
2d358b085a38
[root@localhost /]#
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]# docker run -it centos /bin/bash
[root@b9943e7802b4 /]# exit
exit
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9943e7802b4 centos “/bin/bash” 43 seconds ago Exited (0) 34 seconds ago dreamy_agnesi
[root@localhost /]# docker start b9943e7802b4
b9943e7802b4
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9943e7802b4 centos “/bin/bash” About a minute ago Up 5 seconds dreamy_agnesi
[root@localhost /]# docker kill b9943e7802b4
b9943e7802b4
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]#
4、后台启动容器的其他命令
5、进入当前正在运行的容器
6、从容器内拷贝文件到主机上
7、命令小结
五、镜像部署
1、安装Nginx
1、搜索镜像
docker search nginx
2、下载镜像
docker pull nginx
3、查看镜像
docker images
外网访问: 192.168.3.200
2、安装tomcat
出现404报错页面,这是因为在webapps目录下没有相应的页面,需要将webapp.dist下的文件拷贝到webapps下
[root@localhost docker]# docker exec -it tomcat01 /bin/bash 进入容器
root@8ec2b416b6cc:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@8ec2b416b6cc:/usr/local/tomcat# cd webapps.dist/ 进入到webapps.dist中
root@8ec2b416b6cc:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@8ec2b416b6cc:/usr/local/tomcat/webapps.dist# cp -r webapps.dist/* webapps 拷贝文件
cp: cannot stat 'webapps.dist/’: No such file or directory
root@8ec2b416b6cc:/usr/local/tomcat/webapps.dist# cd …
root@8ec2b416b6cc:/usr/local/tomcat# cp -r webapps.dist/ webapps
root@8ec2b416b6cc:/usr/local/tomcat# cd webapps
root@8ec2b416b6cc:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@8ec2b416b6cc:/usr/local/tomcat/webapps#
3、安装ES+Kibana
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
安装Kibana:
4、安装可视化面板管理
docker volume create portainer_data
docker run -d -p 8088:9000 --name portainer01 --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
六、镜像原理之联合文件系统
七、镜像原理之分层原理
1、提交一个自己的镜像Commit镜像
docker commit -a=“wxs” -m=“add webapps app” 0a0759f6496c tomcat02 修改后的文件提交成一个新的镜像
八、容器的数据卷使用
1、数据的双向绑定
容器的持久化和同步数据,容器间也可以数据共享
将容器的数据同步到主机上
主机上的数据同步到容器中 (数据的双向绑定)
2、实战测试部署Mysql
docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
[root@localhost home]# docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql 启动mysql并创建数据卷
f36b9e81e93d3d5cad787d32b26d31634f922c1e9219054aa96ec6b42aecd564
[root@localhost home]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f36b9e81e93d mysql “docker-entrypoint.s…” 7 seconds ago Up 6 seconds 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp mysql01
[root@localhost home]# ls
apache-tomcat-9.0.48 apache-tomcat-9.0.48.tar.gz jdk-8u151-linux-x64.rpm mysql wxs-springboot-1.0-SNAPSHOT.jar
[root@localhost home]# cd mysql
[root@localhost mysql]# ls
conf data
[root@localhost mysql]#
停止数据库的启动时,查看数据库的数据依然存在,数据卷数据没有丢失,体现了数据卷的持久化功能
3、具名挂载和匿名挂载
九、初识Dockerfile
1、搭建一个自己的镜像
2、数据卷容器,容器间数据共享
容器间的数据共享
dcocker03去继承docker01,实现数据的同步,数据持久化,当父容器停止运行时,元数据依然存在
多个mysql实现数据同步
十、Dockerfile
1、Dockerfile的介绍
2、Dockerfile的构建
dockerfile是面向开发的,当我们发布项目时,就需要搭建一个自己的镜像来跑项目
3、Dockerfile的指令
4、实战一个centos镜像
1、编写Dockerfile的文件
FROM centos
MAINTAINER wxs2485394879@qq.com
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
Run yum -y install net-tools 原生的centos是没有命令的
EXPOSE 80
CMD echo $MYPATH
CMD echo “----end----”
CMD /bin/bash
2、构建Dockerfile镜像
docker build -f wxs-centos -t mycentos:1.0 .
3、测试运行
docker run -it 镜像id
docker history id 查看镜像的下载过程,是怎么制作的,Dockerfile文件的执行情况
5、CMD和ENTRYPOINT区别
6、实战一个tomcat镜像
1、准备镜像文件,tomcat的压缩包、jdk
2、创建一个Dockerfile文件
FROM centos
MAINTAINER wxs2485394879@qq.com
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.48.tar.gz /usr/local/
ADD jdk-8u161-linux-x64.tar.gz /usr/local/
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_161
ENV CLASSPATH
J
A
V
A
H
O
M
E
/
l
i
b
/
d
t
.
j
a
r
:
JAVA_HOME/lib/dt.jar:
JAVAHOME/lib/dt.jar:JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.48
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.48
ENV PATH
P
A
T
H
:
PATH:
PATH:JAVA_HOME/bin:
C
A
T
A
L
I
N
A
H
O
M
E
/
l
i
b
:
CATALINA_HOME/lib:
CATALINAHOME/lib:CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.48/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.48/logs/catalina.out
3、构建镜像
docker build -t mytomcat .
4、启动mytomcat
[root@localhost home]# docker run -d -p 8080:8080 --name wxstomcat01 -v /home/test:/url/local/apache-tomcat-9.0.48/webapps/test -v /home/logs:/url/local/apache-tomcat-9.0.48/logs wxstomcat
da937d260a405afb0080d94e9cfead876d511391311c22d4b54923bd734076fb
[root@localhost home]#
5、将一个项目放在主机的test目录下发布项目
十一、发布镜像
1、发布到DockerHub上
注册账号,命令登录账号 docker login -u 用户名
2、发布到阿里云镜像服务上
十二、Docker网络
1、Docker0
2、容器互联–link
3、自定义网络
[root@localhost /]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet 创建一个网络
b2aa77721dc57e32bf550a8d0940b38495a3bd6d65bc849a3ef0f15bd9b8b0ba
[root@localhost /]# docker network ls
NETWORK ID NAME DRIVER SCOPE
a2854f780218 bridge bridge local
109bdf514ffb host host local
b2aa77721dc5 mynet bridge local -------
c9c42a9d0af1 none null local
[root@localhost /]#
创建了一个自己的网络
[root@localhost /]# docker network inspect mynet 查看网络详细
[
{
“Name”: “mynet”,
“Id”: “b2aa77721dc57e32bf550a8d0940b38495a3bd6d65bc849a3ef0f15bd9b8b0ba”,
“Created”: “2021-07-13T19:47:36.802866719+08:00”,
“Scope”: “local”,
“Driver”: “bridge”,
“EnableIPv6”: false,
“IPAM”: {
“Driver”: “default”,
“Options”: {},
“Config”: [
{
“Subnet”: “192.168.0.0/16”,
“Gateway”: “192.168.0.1”
}
]
},
“Internal”: false,
“Attachable”: false,
“Ingress”: false,
“ConfigFrom”: {
“Network”: “”
},
“ConfigOnly”: false,
“Containers”: {},
“Options”: {},
“Labels”: {}
}
]
[root@localhost /]# docker run -d -P --name tomcat-net-01 --net mynet tomcat
2afc7967f92a74d16e69a3adc8b8a74b7c11a7109b077ab06e9154194b08a361
[root@localhost /]# docker run -d -P --name tomcat-net-02 --net mynet tomcat
07bc549e66c7bfa614662b2956172ad22e06d4da4f653a0ce8ec77bce103689c
[root@localhost /]# docker exec -it tomcat-net-01 ping tomcat-net-02
PING tomcat-net-02 (192.168.0.3) 56(84) bytes of data.
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=1 ttl=64 time=0.193 ms
64 bytes from tomcat-net-02.mynet (192.168.0.3): icmp_seq=2 ttl=64 time=0.076 ms
功能:
自定义的网络可以将容器互联,容器通信,Docker0网络无法进行容器间的通信
4、网络联通,不同集群的子网不同
将某个网段的容器连接到另一个网段
docker run -d -P --net mynet --name tomcat-net-01 tomcat 开启一个网段为mynet的容器
docker run -d -P --name tomcat01 tomcat 开启一个默认的docker0网段容器
docker network connect mynet tomcat01 将自定义网络连接到其他网络
docker network inspect mynet 查看网络信息配置
docker exec -it tomcat01 ping tomcat-net-01 查看不同的网段容器是否ping通 只有tomcat01容器能连通,其他容器不能连通
十三、Redis集群部署实战
1、创建一个redis的网段
docker network create redis --subnet 172.38.0.0/16
2、配置6个redis的配置文件
for port in KaTeX parse error: Undefined control sequence: \ at position 13: (seq 1 6); \̲ ̲do \ mkdir -p /…{port}/conf
touch /mydata/redis/node-
p
o
r
t
/
c
o
n
f
/
r
e
d
i
s
.
c
o
n
f
p
o
r
t
6379
b
i
n
d
0.0.0.0
c
l
u
s
t
e
r
−
e
n
a
b
l
e
d
y
e
s
c
l
u
s
t
e
r
−
c
o
n
f
i
g
−
f
i
l
e
n
o
d
e
s
.
c
o
n
f
c
l
u
s
t
e
r
−
n
o
d
e
−
t
i
m
e
o
u
t
5000
c
l
u
s
t
e
r
−
a
n
n
o
u
n
c
e
i
p
172.38.0.1
{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/conf/redis.confport6379bind0.0.0.0cluster−enabledyescluster−config−filenodes.confcluster−node−timeout5000cluster−announceip172.38.0.1{port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
2、启动redis容器
指定数据卷路径,指定自定义网络,指定redis版本 ,携带redis的配置文件启动
依次在启动5个redis容器
3、创建集群
4、一主一从,三个redis组成集群
十四、SpringBoot微服务打包Docker镜像
1、构建springboot项目
2、打包应用
3、编写dockerfile
4、构建镜像
将jar包cp到镜像中打包
5、发布运行