1. 初始Docker
1.1 什么是docker
注意:docker容器之间使用沙箱实现容器隔离
43 04:20-07:52 讲解架构分层
1.2 Docker和虚拟机的差别
44
1.3 Docker架构
注意:容器只能读取镜像中数据,不能向镜像中写入数据,只能通过拷贝一份然后修改备份数据
04:52 讲解docker架构
1.4 docker安装
Mac 安装 docker_IMSince1999的博客-优快云博客_mac安装docker
2. 镜像命令
2.1 docker镜像命令
1、拉取文件
从本地拉取: docker build 镜像
从服务器获取镜像:docker pull 镜像
2、查看镜像: docker images
3、删除镜像: docker rmi 镜像
4、保存镜像: docker save 镜像
5、加载镜像: docker load 镜像
6、推送镜像: docker push 镜像
查看docker所有命令:
docker --help
docker images --help
操作*:
http://hub.docker.com
如果从 docker.hub下载镜像(例如:nginx):
步骤一:
镜像打包到本地:
docker save --help
docker save -o nginx.tar nginx:latest
步骤二:
删除镜像:
docker rmi nginx:latest
查看镜像:
docker images
步骤三:
加载镜像:
docker load --help
docker load -i nginx.tar
1、http://hub.docker.com
2、docker pull redis
3、docker images
4、docker save -o redis.tar redis:latest
5、docker rmi redis:latest
6、docker load -i redis.tar
docker images
3.2 docker容器命令
注意:1、暂停和停止的区别
2、删除镜像:docker rmi 镜像
删除容器:docker rm 容器
端口映射:容器之间是相互隔离的,如果想要访问只能通过映射宿主机器端口,通过宿主机器去访问
原理:将完全隔离的容器通过映射的窗口,让外界机器可以访问
操作:*
docker run -name mn -p 80:80 -d nginx
--? 容器一旦创建完成就会返回一个唯一的id
docker ps
访问: http://localhost:80
查看日志:
docker logs mn
查看持续日志:
docker logs -f mn
docker exec -it mn bash
##进入容器内部(docker容器有自己的Linux目录)
找到nginx的静态文件
cd /usr/share/nginx/html
替换文本
sed -i 's#Welcome to nginx#传智教育欢迎您#g' index.html
sed -i 's#<head>#<head><meta charset="utf-8">#g' index.html
停止容器:
docker stop mn
查看所有容器(包含停止容器):
docker ps -a
启动容器:
docker start mn
删除容器:
docker stop mn
docker rm mn
强制删除容器:
docker rm -f mn
docker ps -a
操作:*
docker exec -it mr bash
redis-cil
快捷进入reids:
docker exec -it mr redis-cil
数据卷挂载案例1
删除未使用的数据卷:
docker volume prune
查看数据卷:
docker volume ls
创建数据卷:
docker volume create html
删除数据卷:
docker volume rm html
注意: 容器文件挂载到宿主机上,修改文件更加方便
修改数据卷中的内容:
打开nginx容器,数据同步修改了:
验证:
删除数据卷和容器 :
重新创建nginx(数据卷html不存在自动创建):
数据卷挂载案例2
1. 将mysql.tar文件上传到虚拟机,通过老大命令加载为镜像
2.创建目录/tmp/mysql/data ,将课前资料的hmy.cnf文件上传到/tmp/mysql/conf
3.创建目录/tmp/mysql/conf
4.创建并运行Mysql容器:
数据卷挂载和容器直接挂载的区别:
容器直接挂载需要自己手动创建目录
数据卷挂载自动创建目录
3.docker自定义镜像(重新理解 举一反三)
没有底层的函数库怎么能构建环境配置;没有环境配置环境,如果构建依赖的安装;
没有依赖的安装如何完成应用的安装;没有应用的安装如何做应用的配置;
课件docker不仅是将这些东西融合在一起,还得按照一定的顺序去分层构建;
为什么分层?
比如升级mysql,只需要修改一些层次就可以,提高复用性,节约时间;
1.创建一个空文件夹docker-demo
2.拷贝课前资料的docker-demo.jar、Dockerfile、jdk8.tar.gz文件到docker-demo这个目录
DockerFile:
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装JDK
RUN cd $JAVA_DIR \
&& tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
3.进入docker-demo 运行命令:(. 表示dockerFile在当前目录下)
逐步执行步骤:
镜像构建完成并运行容器:
DockerFile:
# 指定基础镜像
FROM java:8-alpine
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
DockerCompose和run的语法对比:
注意:mysql在容器内部使用,所以不需要暴露接口
修改服务名:
部署项目:
查看日志:
注意:生产环境中线部署nocas,再去部署微服务(避免nocas没有部署完成,微服务连接nocas报错的情况)
重启服务:
验证: