一、快速入门:
1.Docker的安装
安装docker引擎
官方网址:Install Docker Engine on CentOS | Docker Docs
朋友们,有坑,千万不要用官方的仓库,就是下面这一步
记得用国内的镜像源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
下图是官方的步骤,第二行代码应换成国内的镜像源
如果,不小心用了国外的镜像源,记得按下面步骤
1.进入 /etc/yum.repos.d 目录2. 删除与docker相关的文件3.配置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo4.然后再按官方的步骤安装
2.部署MySql
docker run -d \--name myFirst \-p 3000:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \mysql-d 是让容器在后台运行,一般与run是配套的。--name 给容器命名,必须唯一
--p 设置端口映射,访问主机的3000端口 映射到 访问容器的3306端口--e 暂时不清楚?设置时区?--e 也不太清楚?得给mysql设置个初始化密码我懂了
-e KEY=VALUE 意思是设置环境变量不同的镜像 -e不同 ,看docker hub 上镜像的说明
通过docker ps 可以看到,myFirst这个容器正在运行
此时你就可以 进入容器中 ,去登录mysql客户端
docker exec -it myFirst bash
我们也可以在linux虚拟机上去访问容器里的数据库,因为我们设置了端口映射,当访问本机的3000端口时,回去访问容器的3306端口。但记得 在连接,记得加 -h ip地址 ,虽然是在本机上操作,但还是要用上本机的ip地址。
3.镜像和容器
4.命令解读
一般docker run 和 -d 选项是配套的。
下面是真正的命名规范
5.案例 拉取nginx
docker的容器给我们准备的是 所必备的最小运行资源,因此进入容器内后,并不能使用vi 进入vim编辑器。
1.运行容器
2.查看容器
当使用 docker inspect 容器name 是查看某个容器的详细信息
当使用 docker volume inspect 是查看数据卷的详细信息,可以取看它本机上的挂载点在哪里。
3. 查看数据卷详细信息( 当不指定路径时,本机挂载点 默认是在 /var/lib/docker/volumes/ 这个路径下)
4.当修改挂载点下的文件后,容器内相应的文件也被修改。
数据卷就像是一个桥梁
当我测试 docker volume prune 这个指令时,它会把 被删除容器的 数据卷清除 ,释放磁盘空间。
6.mysql 容器的数据挂载
遇到的问题:
1.final shell无法正常上传文件 。因为我使用的是普通用户,普通用户只能在自己的home/用户名/目录下进行上传,是无法去 其他路径,即root用户的范围来上传文件。
解决:使用root 用户去连接。
7.Dockerfile 语法
分层,可以让我们去共享某一个层。
copy时,docker会为我们去创建目录
下面这段代码,让我回忆了很多,我重新回顾了环境变量,软链接。
# 指定基础镜像
FROM ubuntu:16.04
# 配置环境变量,JDK的安装目录、容器内时区
ENV JAVA_DIR=/usr/local
ENV TZ=Asia/Shanghai
# 拷贝jdk和java项目的包
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 设定时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 安装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 8080
# 入口,java项目的启动命令
ENTRYPOINT ["java", "-jar", "/app.jar"]
下面来回顾软连接:
我忘记 -s -f 的含义, 但我从来不知道 -n是什么意思
我的理解:解引用时,会指向确切的文件。即$TZ 会被解析成 具体的文件 ,然后修改$TZ 的值后,软链接仍然指向原来的值,可以看看下面第3张图。
8.自定义镜像
这个 句点 不能缺
实践:
在创建并运行容器时,需要指定其 名字:版本 。
9. 网络
使用自定义网络,才可以通过 容器名 ping通
当将容器连接到 自定义网络上时 ,有两种方式。
1.将运行时的容器连接到指定网络。使用docker network create
2.在创建容器时连接到指定网络。使用 --network 关键字
10.项目部署
一个容器可以配置多个端口映射
番外篇:硬啃英语文档
1.Docker overview
:响应式部署和扩展
Docker Architecture
守护进程
客户端
Docker registries: Docker 注册表
A Docker registry stores Docker images. Docker Hub is a public registry that anyone can use, and Docker looks for images on Docker Hub by default. You can even run your own private registry.
When you use the docker pull
or docker run
commands, Docker pulls the required images from your configured registry. When you use the docker push
command, Docker pushes your image to your configured registry.
Docker Objects