docker 的作用是什么? 为什么要用docker?
Docker 的核心概念是什么?
导入和导出镜像命令?
怎么清理所有容器? docker rm -f $(docker ps -aq)
重启docker服务: systemctl restart docker
查看构建过程:docker history tomcat
对默认 命令的覆盖
进入容器,运行指定命令:docker exec -it 容器id bash
exec:execute
i : 与容器交互
t : 启动终端
bash: 启动命令行 相当于cmd
:字符连接
docker启动时,怎么使容器一起启动?
怎么可以在容器停止时自动删除容器 ?
为什么端口映射?手动映射,自动映射?
构建镜像流程?
Docker docker : 一种容器化技术~快速发布,部署,隔离 ;
“一次封装,到处运行”,因为docker解决了应用环境的问题,安装了docker的平台就能跑“docker包”,这样就决绝了“开发环境能跑,一上线就崩”的尴尬。
学习链接:镜像
docker 轻量级的虚拟机
./ip-staticip:192.168.64.150ifconfig
上传文件到 /root导入镜像
docker load -i docker-images.gz
重启docker服务:
systemctl restart docker
5、导出和导入镜像
导出镜像
# 把两个镜像 redis:latest 和 centos:8 导出,并压缩到 imgs.gzdocker save redis centos:8 | gzip > imgs.gz
导入镜像
docker load -i imgs.gz
2 从镜像运行容器学习链接:从镜像运行容器
2.1 从镜像运行容器从 tomcat 镜像启动容器:
docker run tomcat
容器启动后在容器中运行了 tomcat 应用。
这样启动会占用命令行,可以用 ctrl+c 退出 tomcat 应用。当容器中没有任何应用运行时,容器也会自动关闭退出。
查看容器:
docker ps -a
2.2 容器启动后运行的命令容器启动后需要运行指定的命令来启动一个应用。
在镜像中指定的默认运行命令
docker history tomcat #查看构建过程
#设置默认启动命令#1.CMDCMD ["java", "jar", "/e.jar", "--server.port=2001"]#2、设置参数ENTRYPOINT ["java"]CMD ["jar", "/e.jar", "--server.port=2001"]#覆盖默认命令docker run eureka java -jar /e2.jar #会把cmd设置的命令覆盖docker run --entrypoint java eureka -jar /e2.jar #覆盖entrypoint方式设置的命令
i : 与容器交互
t : 启动终端
bash: 启动命令行 相当于cmd
:字符连接
ls:
--name:
每个启动的容器都可以指定一个名称,方便使用名称来操作容器。
--restart=always:
docker系统服务重启,或者操作系统重启,容器可以随系统自动启动。
docker run -d --name cat1 tomcatdocker run -d --name cat2 --restart=always tomcat
cat1 不随系统重启
--rm:
有时候我们会临时使用一个容器之后这个容器就不再使用,添加 --rm 参数可以在容器停止时自动删除容器
docker cp:
在容器和宿主机之间复制文件
下面来看一个实际的例子,这个例子中我们从 tomcat 的一个临时容器复制配置文件 server.xml 到宿主机,然后在 server.xml 中修改端口号,把 8080 改成 80。
docker run -d --name tmp
–rm
tomcat
docker cp tmp:/usr/local/tomcat/conf/server.xml
~/server.xml
docker stop tmp
# 启动一个临时容器docker run -d --rm --name tmp tomcat# 把 tomcat 的 server.xml 复制到宿主机的 /root/ 目录下docker cp tmp:/usr/local/tomcat/conf/server.xml /root/# 停止临时容器,会自动删除docker stop tmpdocker ps -a# 修改 server.xml 中的8080端口,改成80vim server.xml# -v 把宿主机路径挂载到容器的一个路径# 挂载的路径可以是文件,也可以是文件夹# 这里把修改过的 server.xml 挂载到新启动的容器中docker run -d --name cat2 -v /root/server.xml:/usr/local/tomcat/conf/server.xml tomcat# 查看启动日志,确认使用 80 端口启动docker logs cat2
docker run -d --name cat3 -v /root/server.xml:/usr/local/tomcat/conf/server.xml tomcat
3 文件挂载学习链接:文件挂载
一、-v 目录挂载 docker ps -aq
docker rm -f ${docker ps -aq}
docker run -d --name cat1
-v /usr/app:/opt/app
tomcat
docker exec -it cat1 touch /opt/app/f1.txt
ls /usr/app
上面例子中用到 -v 参数,他可以将宿主机的路径挂载到容器指定路径,通过 -v 参数可以挂载文件、目录和数据卷。
挂载目录:
# 新建数据卷docker volume create my-vol# 查看 my-vol 数据卷的信息docker volume ls# /var/lib/docker/volumes/my-vol/_datadocker inspect my-vol# 挂载 my-vol 数据卷到容器的 /opt/app 路径docker run -d --name cat2 -v my-vol:/opt/app tomcat# 在容器的 /opt/app 下新建 f2.txtdocker exec -it cat2 bashtouch /opt/app/f2.txt# 退出容器的命令行exit# 进入 my-vol 数据卷的真实目录,查看 f2.txtcd /var/lib/docker/volumes/my-vol/_datals
# 新建数据卷docker volume create my-vol# 查看 my-vol 数据卷的信息docker volume ls# /var/lib/docker/volumes/my-vol/_datadocker inspect my-vol
# 挂载 my-vol 数据卷到容器的 /opt/app 路径docker run -d --name cat2 -v my-vol:/opt/app -v ~/server.xml:/usr/local/tomcat/conf/server.xml tomcatdocker inspect cat2docker exec -it cat2 touch /opt/app/f2.txt# 查看 my-vol 数据卷的真实目录,查看 f2.txtls /var/lib/docker/volumes/my-vol/_data
4 网络学习链接:Docker(五)-网络
端口映射 客户端访问时不能跨过宿主机直接访问容器,宿主机需要映射(宿主机使用什么端口,向容器的哪一个端口转发 -p)
把客户端的请求转发到容器
-p参数:
通过 -p 参数设置,可以在宿主机上选择一个端口映射到容器的端口。
docker run -d --name cat1 -p 80:8080 #宿主机端口映射到容器端口tomcat
浏览器访问: http://192.168.64.150
P (大写)
自动端口映射
根据镜像中设置暴露的端口来自动映射到宿主机形同端口
docker run -d --name cat2
-P
tomcat
docker run -d --name cat3
-v ~/server.xml:/usr/local/tomcat/conf/server.xml
-P tomcat
--net host
容器直接使用宿主机的网络和端口
docker run -d --name cat1 --net host tomcat
http://192.168.64.150:8080/
虚拟网络 1 新建虚拟网络# 新建虚拟网络 my-netdocker network create my-net# 查看虚拟网络docker network ls# 查看网络描述信息docker inspect my-net# 查看宿主机新建的虚拟网卡ifconfig# 清理容器docker rm -f $(docker ps -aq)
2 新建两个容器# 新建两个容器 cat1 和 cat2# 连接到虚拟网络 my-netdocker run -d --name cat1 --net my-net #连接到虚拟网络tomcatdocker run -d --name cat2 --net my-net tomcat# 查看两个容器的虚拟网络ipdocker inspect cat1docker inspect cat2
查看详情docker inspect cat1
# 测试网络能否互联互通# 从宿主机ping两个容器ping 172.18.0.2ping 172.18.0.3# 进入cat1,ping宿主机和cat2docker exec -it cat1 ping 172.18.0.1docker exec -it cat1 ping 172.18.0.3# 从容器访问另一个容器,可以使用容器名称访问,容器内部实现了解析环境docker exec -it cat1 ping cat2
5 构建镜像 学习连接:构建镜像
docker:https://hub.docker.com/
装机流程 Dockerfile Dockerfile 类似于一个批处理文件,用来设置镜像的构建流程
安装配置 Tomcat
基础系统
FROM centos:8
添加文件
jdk
tomcat
ADD jdk.gz tomcat.gz /usr/local/
配置环境变量
JAVA_HOME
CATALINA_HOME
PATH
ENV JAVA_HOME=.....、CATALINA_HOME=.....、PATH=......、(可以折行 )
WORKDIR 容器启动后默认切换的目录
WORKDIR /usr/local/tomcat
EXPOSE 8080 可选 (暴露端口,只影响自动映射)
CMD 默认启动命令 (启动容器后在容器中默认的命令)
CMD
进入 tomcat 文件夹,并在当前文件夹下找到 Dockerfile 和其他需要的文件,来构建镜像:
查看构建过程
docker run -d --name cat1 -p 8080:8080 tomcat:10docker ps -adocker logs cat1
注意:尽量减少镜像层的创建,因为每一层都要启动一个新容器