讲的太好了,一天看了20多个视频,如果学Docker,推荐学习。
学习记录
- 1、Docker学习大纲
- 2、聊聊Docker为什么会出现
- 3、聊聊Docker的历史
- 4、Docker能做什么
- 5、Docker中的名词概念
- 6、安装Docker
- 7、配置阿里云镜像加速
- 8、Run的流程和Docker原理
- 9、镜像的基本命令
- 10、容器的基本命令
- 11、日志、元数据、进程的查看
- 12、进入容器的命令和拷贝命令
- 13、常用命令小结
- 14、作业一:部署Nginx
- 15、作业二:部署Tomcat
- 16、作业三:部署ES+Kibana
- 17、Portainer可视化面板安装
- 18、镜像原理之联合文件系统
- 19、镜像原理之分层理解
- 20、Commit镜像
- 21、容器数据卷使用
- 22、实战:MySQL同步数据
- 23、具名挂载和匿名挂载
- 24、数据卷之Dockerfile
- 25、数据卷容器
- 26、DockerFile介绍
- 27、DockerFile指令说明
- 28、实战:构建自己的centos
- 29、CMD和ENTRYPOINT的区别
- 30、实战:Dockerfile制作tomcat镜像
- 31、发布镜像到DockerHub
- 32、发布镜像到阿里云容器服务
- 33、Docker所有流程小结
- 34、Docker0网络详解
- ️ 35、容器互联--link
- ️ 36、自定义网络
- ️ 37、网络连通
- ️ 38、Redis集群部署实战
- ️ 39、SpringBoot微服务打包Docker镜像
- ️ 40、结语
学习笔记
弱小和无知不是生存的障碍,傲慢才是。
看视频快速记录的笔记,格式可能不太好,但是每一行命令都是运行过的
- 系统内核版本查看
uname -r
- 系统信息
cat /etc/os-release
# 启动docker
systemctl start docker
# hello word
sudo docker run hello-world
# 运行镜像
sudo docker run -it ubuntu bash
# 查看镜像
sudo docker images
每次输入命令都需要sudo很不方便,可以查看这个官方文档修改
https://docs.docker.com/engine/install/linux-postinstall/
如果不想看,最简单的办法是执行下面的命令,作用是将当前登录的用户加入docker用户组,这样就不需要sudo了,然后记得注销用户重新登录一下。
sudo groupadd docker
sudo usermod -aG docker $USER
镜像加速
创建或修改
/etc/docker/daemon.json
文件,并写入以下内容:直接用tee来快速创建文件,并且写入内容
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF
- 重新启动 Docker 服务 。重启之前可以
docker ps
看下自己起了哪些服务,别忘了重启
systemctl daemon-reload
service docker restart
docker info
查看是否生效
在最下面有这两行即为成功
Registry Mirrors:
https://mirror.ccs.tencentyun.com
- 重启第 2 步中停掉的服务
Docker常用命令
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker的系统信息,镜像容器的数量
docker 命令 --help # docker帮助命令
镜像命令
docker images # 查看所有镜像
docker search # 搜索镜像
docker pull mysql:5.7 # 下载拉取镜像
docker rmi -f id # 删除镜像
# 批量删除全部
docker rmi -f $(docker images -aq)
容器命令
有了镜像才可以创建容器
docker pull centos # 下载容器
docker run [可选参数] image
--name="Name" 容器名字
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080 ip:主机端口:容器端口
-P 随机指定端口
docker ps # 列出运行的容器
-a # 列出当前和历史运行的容器
-n=? # 列出最近创建的容器
-q # 只显示容器的编号
docker rm 容器id
-f 强制删除
# 批量删除全部
docker rm -f $(docker ps -aq)
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前运行的容器
docker kill 容器id # 强制停止当前容器
exit # 直接停止容器退出
ctrl + P + Q # 容器不停止退出
常用的其他命令
docker run -d centos # 后台启动
docker logs -tf --tail 10 容器id
一直输出内容的脚本
docker run -d centos /bin/sh -c "while true;do echo hello; sleep 1;done"
查看容器中的进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id
进入当前正在运行的容器
docker exec -it 容器id /bin/bash # 会创建一个新的窗口
docker attach 容器id # 进入正在运行的
从容器内拷贝文件到主机上
docker cp 408e026ee14e:/home/test.java ./
docker 安装nginx
https://registry.hub.docker.com/search?q=nginx
docker search nginx
docker 安装 tomcat
docker run -it --rm tomcat:9.0 # 用完就删 一般用来测试
docker 安装es+kibana
es暴露的端口很多,耗内存
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
docker stats
查看空间占用
有时候玩docker莫名奇妙少了很多空间,可以看看这里
查看docker磁盘占用
docker system df
查看docker的匿名数据卷空间占用
du -sh /var/lib/docker/volumes/*
查看单个image、container大小:
docker system df -v
空间清理
注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了,所以使用之前一定要想清楚。
docker system prune
命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
docker system prune -a
命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉
可视化
portainer
Docker图形化界面管理工具!提供一个后台面板让我们操作
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
访问测试
Rancher
提交镜像
docker commit -a="happen" -m "add webapps app" id tomcate02:1.0
Docker 容器数据卷
如果数据都在数据卷中,那么我们删除容器,数据就会丢失!需求:数据持久化
使用数据卷
方式一:使用命令来挂载
docker run -it -v 主机目录:容器内目录 -p 主机端口:容器内端口
docker run -it -v /home/ubuntu/test:/home centos /bin/bash
安装MySQL
docker pull mysql:5.7
docker run -d -p 3310:3306 -v /home/ubuntu/mysql/conf:/etc/mysql/conf.d -v /home/ubuntu/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
具名挂载
docker run -d -P --name nginx03 -v name-nginx:/etc/nginx nginx
匿名挂载
-v 容器路径
docker run -d -P --name nginx02 -v /etc/nginx nginx
docker volume --help
docker volume ls # 查看所有卷
ro/rw区别
docker run -d -P --name nginx03 -v name-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx03 -v name-nginx:/etc/nginx:rw nginx
- ro readonly 只读,只能从外部改变,不能从内部改变
- rw readwrite 可读可写
DockerFile
就是用来构建docker镜像的文件
通过这个脚本可以生成镜像,一个一个的命令,每个命令都是一层
FROM centos
VOLUME ["volume01", "volume02"]
CMD echo "-----end-----"
CMD /bin/bash
docker build -f dockerfile1 -t happen/centos .
数据卷容器
两个mysql同步数据
--volumes-from
docker run -d -p 3310:3306 -v /home/ubuntu/mysql/conf:/etc/mysql/conf.d -v /home/ubuntu/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
docker run -d -p 3311:3306 --volumes-form mysql01 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
# 这个时候可以实现两个容器数据同步
docker run -it --name docker01 happen/centos
docker run -it --name docker02 --volumes-from docker01 happen/centos
docker run -it --name docker03 happen/centos
DockerFile的指令
以前用别人的,现在知道这些指令,练习自己写一个
FROM centos # 基础镜像,一切从这里开始
MAINTAINER # 镜像是谁写的
RUN # 镜像构建的时候需要运行的命令
ADD # 给他文件,会自动解压
WORKDIR /root # 设置当前的工作目录
VOLUME # 挂在的目录
EXPOSE # 指定暴露端口,保留端口
CMD ls -a # 指定容器启动的时候运行的命令 只有最有一个会生效,可被替代
ENTRYPOINT # 指定容器启动的时候运行的命令 可以追加命令
ONBUILD # 当构建一个被继承的dockerfile的时候,会触发
COPY # 类似于ADD,将我们的文件拷贝到镜像中
ENV # 构建的时候设置环境变量 设置mysql用户名密码
实战测试
- 编写配置文件dockerfile-centos
FROM centos
MAINTAINER glwhappen<1597721684@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "------end--------"
CMD /bin/bash
FROM centos:7
MAINTAINER glwhappen<1597721684@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN rm -f /etc/yum.repos.d/CentOS-Base.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all
# RUN yum makecache
# RUN yum install -y yum-plugin-fastestmirror
RUN yum -y install vim
RUN yum -y install net-tools
RUN yum clean all
EXPOSE 80
CMD echo $MYPATH
CMD echo "------end--------"
CMD /bin/bash
- 通过文件构建镜像
docker build --no-cache=true -f dockerfile-centos -t mycentos:0.2 .
制作一个tomcat镜像
FROM centos:7
MAINTAINER glwhappen<1597721684@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD jdk-8u351-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.70.tar.gz /usr/local/
RUN rm -f /etc/yum.repos.d/CentOS-Base.repo
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum -y install vim
RUN yum clean all
ENV MYPATH /usr/local
WORKDIR ${MYPATH}
ENV JAVA_HOME /usr/local/jdk1.8.0_351
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.70
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.70
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.70/bin/startup.sh && tail -F /url/local/apache-tomcat-9.0.70/logs/catalina.out
创建镜像
docker build -t diytomcat .
创建容器
docker run -d -p 9090:8080 --name diytomcat1 -v /root/tomcat/test/:/usr/local/apache-tomcat-9.0.70/webapps/test -v /root/tomcat/logs/:/usr/local/apache-tomcat-9.0.70/logs diytomcat
测试是否运行成功
curl localhost:9090
进入容器
docker exec -it diytomcat1 /bin/bash
删除容器
docker stop diytomcat1
docker rm diytomcat1
删除镜像
docker image rm diytomcat
发布镜像
打包一个带标签的镜像
docker build -t diytomcat:1.0 .
docker login -u glwhappen
docker push glwhappen/diytomcat:1.0
测试邮件
好