1、安装
先卸载
···yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
再安装安装包
yum install -y yum-utils
设置镜像仓库(使用国内镜像)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecashe fast
安装最新的
yum install docker-ce docker-ce-cli containerd.io
启动
systemctl start docker
检查是否安装成功
docker version
hello word
docker run hello-world
查看镜像
docker images
卸载
a卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
b删除资源
rm -rf /var/lib/docker
默认工作路径/var/lib/docker
阿里云镜像加速
docker是怎么工作的
Docker是一个Client+Server结构的系统,Docker的守护进程运行再主机上,通过Socket从客户端访问!
DockerServer接收到Docker-Client的指令,就会执行这个命令
Docker的常用命令
帮助命令:
docker version
docker info
docker --help
镜像命令
docker images查看主机镜像
搜索
docker search mysql
可选项,通过收藏来过滤
--filter=stars=3000(docker search mysql --filter=stars=3000)
下载镜像
docker pull mysql [:tag] (例子:docker pull mysql:5.7)
删除镜像
docker rmi -f(全部删掉)
docker rmi -f image的id (删除指定容器)
容器命令
-说明:有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos(新建容器)
docker run centos (启动容器)
-d 后台运行
-it使用交互方式运行,进入容器查看内容
-p指定容器的端口 -p 8080
1、主机端口:容器端口
2、主机端口:容器端口(常用)
3、容器端口
ip:主机端口:容器端口
启动并进入容器
docker run -it centos /bin/bash
ls查看容器内地centos
exit 退出容器
docker ps:正在运行的容器
docker ps -a 运行过得容器
容器删除命令
docker rm $(docker ps -a -q)
正在运行的容器不能删除
docker start 容器id 启动容器
docker restart 容器id 重启 容器
docker stop 停止当前正在运行的容器
docker kill 容器id 杀掉运行容器
常用的其他命令
docker run -d 镜像名 :后台运行
坑:容器启动后会发现自己没有提供服务,就会立刻停止,就是没有程序了
查看日志
docker logs -f -t --tail(没学会)
查看容器元数据
docker inspect 容器id
进入当前正在运行的容器(通常都是后台运行的)
需进入修改配置
1、docker exec -it 容器id bashshell (进入容器后开启一个新的终端)
2、docker attach 容器id (进入的是正在运行的命令行而不是开启一个新的窗口相较于1)
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的的主机路径
官方下载
docker run -it --rm tomcat(用完即删,用于测试)
运行nginx
docker run d --name nginxlsl -p 3344:80 nginx
其中 --name是命名
-p 宿主机端口:容器内部端口
部署tomcat
docker run tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
启动安装elasticsearch
docker run -d --name elasticsearch -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
特别耗内存,可在其中加入-e EX_JAVA_OPTS="-Mms64m -Xmx512m"
Kibana 连接es
可视化
portainer(先用这个,不是最佳选择)
Rancher(CI/CD再用)
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
commit镜像
docker commit 提交容器程为一个新的副本
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
生成的新镜像可以以后正常使用
容器数据卷
什么是容器数据卷
docker理念,将应用和环境打包成一个镜像!如果容器删除,数据就会丢失。需求数据可持久化。
容器之间可以有数据共享的技术!
Docker容器中产生的数据可以同步到本地就是卷技术。
目录的挂载,将我们容器内的目录挂载到linux上面!
使用数据卷
方式一:使用命令挂载 -v 例子docker run -v 主机目录:容器内目录
部署mysql
docker run -d -p 3310:3306 --name mysql01 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
具名挂载 -v 名字:容器内路径
匿名挂载 -v 容器内路径
指定路径挂载 -v /卷路径:/容器内路径
在挂载后加上:ro或:rw 就是(只读和可读写的权限)针对的是在内部的权限
初识dockerfile
dockerfile就是可以用来构建镜像,之前用commit创建过。就是命令脚本,通过这个脚本可以生成镜像,镜像是一层一层的,脚本是一个一个的命令,每个命令都是一层。
创建一个dockerfile1
内容:
FROM centos
VOLUME ["volume01","volume"]
CMD echo "---end---"
CMD /bin/bash
用dockerfile构建镜像命令,记住加 .
docker build -f dockerfile1 -t lishuailing:1.0 .
多个容器同步卷 启动时 --volumes-from
结论:容器之间可以做一些配置信息之间的传递,通过数据卷可以实现。数据卷的声明周期可以一直持续的没有容器使用为止。一旦持续到了本地可以永久保存。
Dockerfile的使用
1、编写一个dockerfile文件
2、docker build构建成为一个镜像
3、docker run 运行镜像
4、docker push 发布镜像(DockerHub、阿里云镜像仓库!)
docker构建过程
基础知识
1、每个保留关键字(指令)都必须是大写字母
2、执行从上到下顺序执行
3、#标识注释
4、每一个指令到会创建提交一个新的镜像层,并提交!
DockerFile指令
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,一般是姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令,触发指令
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量
练习:编写dockerfile文件
FROM centos
MAINTAINER lishuailing<635032144@qq.com>
ENV MYPATH /use/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-toolsx
EXPOSE 80
CMD echo $MYPATH
CMD echo "----and----"
CMD /bin/bash
通过文件构建镜像
docker build -f mydockerfile-centos -t mycentos:1.0 .
实战tomcat镜像
1、准备镜像文件tomcat压缩包,jdk压缩包
2、编写dockerfile文件,官方命名为Dockerfile 此命名在build时候就会自动寻找文件,不需要-f指定了
From centos
MAINTAINER lishuail<635032144@qq.com>
COPY readme.txt /usr/local/readme.txt
ADD apache-tomcat-9.0.41.tar.gz /usr/local/
ADD jdk-8u271-linux-aarch64.tar.gz /usr/local/
RUN yum -y install vim
ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_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
启动容器
docker run -d -p 9090:8080 --name lishuailingTomcat -v /home/lishuailng/build/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test -v /home/lishuailing/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-9.o.22/logs diytomcat
Docker 网络
理接Docker0
清空所有环境
ip addr
docker 每启动一个容器,docker就会给容器分配一个ip,只要电脑上安装了一个dokcer,就会有一个docker网卡(桥接模式),使用的技术是evth-pair技术。
每启动一个容器主机就会多出一个网卡(成对出现)
思考一个场景,微服务下,database url=ip:,项目不重启,数据库ip换了,我们希望可以处理这个问题,可以名字来进行访问容器。
用--link技术可以实现但是比较笨(使用自定义网络更好)
自定义网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
把docker容器发布在自己的网络上就可以相互ping 通了,通过名字也可以直接ping通
自定义网络的好处:
mysql/readis-不同的集群使用不同的网络,保证集群是安全和健康的
测试大同别的网端的容器到本网端
docker net work mynet tomcat01
一个容器两个IP地址