Docker学习笔记

概述

什么是Docker?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

完整的dockers具有四个部分:docker客户端,docker镜像,docker容器,docker仓库

docker很重要的一个特性是隔离,指的是每个docker容器之间是相互隔离的,每一个docker内都是一个新的操作系统。

docker的隔离机制有利有弊,但是会损耗8%到20%的性能。

常用的Docker命令

docker的操作主要是在对容器和镜像进行操作,下面的命令比较常用:
1.拉取镜像

shell 复制代码
docker search

例如:从docker镜像仓库搜索所有和mysg|相关的镜像

docker search mysql
2.从docker仓库拉取镜像

shell 复制代码
 docker pull

例如:从docker仓库拉取mysg|镜像

docker pull mysql
3.启动mysq|镜像

shell 复制代码
docker run mysql 

4.查看所有正在运行的docker容器

shell 复制代码
docker ps     

5.查看所有的docker容器

shell 复制代码
 docker ps -a

6.停止当前容器

shell 复制代码
 docker stop 容器id

7.重启容器

shell 复制代码
docker restart 容器id

8.启动容器

shell 复制代码
docker start 容器id

9.删除某个容器

shell 复制代码
docker rm 容器id

10.删除某个镜像

shell 复制代码
docker rmi 镜像id

11.查看当前下载的所有镜像

shell 复制代码
docker images

12.容器id查看容器的日志

shell 复制代码
docker logs -f 容器id

13.查看容器的日志

shell 复制代码
docker logs -f 容器id
shell 复制代码
docker logs -f 容器id -n 1000  只输出某容器后1000行的日志

服务器开启虚拟内存

在服务器中开启虚拟内存,可以让使用更多的内存

1.首先在某个空间足够的文件夹下创建一个file文件夹,不知道那个空间大可以使用df -h命令查看

shell 复制代码
mkdir /file

2.创建交换文件(swap file),用作虚拟内存的一部分

shell 复制代码
dd if=/dev/zero of=/file/swap bs=1024 count=4096000

3.将之前创建的/file/swap文件转换为交换文件,并将其挂载为系统的交换空间。

shell 复制代码
mkswap /file/swap
swapon /file/swap

4.将/file/swap文件添加到/etc/fstab文件中,以便在系统启动时自动挂载该交换文件

powershell 复制代码
echo "/file/swap swap swap defaults 0 0" >> /etc/fstab

到此开启完毕

构建镜像并启动springboot镜像

构建容器服务一共可以分为四步

1,编写Dockerfile

2,docker build 构建镜像(根据Dockerfile构建)

3,docker run 镜像

4,docker push 镜像

编写Dockerfile

第一步就是编写Dockerfile,Dockerfile是我们要打docker镜像的脚手架,也就是说我们的docker镜像就是根据Dockerfile来打的

写一个简单的dockerfile

powershell 复制代码
FROM  openjdk:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]

可以看到,Dockerfile是由很多指令来组成,比如说FROM,COPY
Dockerfile常见指令
1.FROM

powershell 复制代码
FROM  openjdk:8

指定基础镜像,用于构建当前镜像的基础。也就是说我们要打镜像的基础包,我们程序运行所需要的环境,比如说Springboot运行需要java8,那就需要再jdk8的基础上构建自己的镜像。
2.COPY/ADD

powershell 复制代码
COPY *.jar /app.jar

将文件从主机复制到镜像中。我们的镜像当中需要包含的文件,比如说需要jar包,就需要将jar包放到镜像中去,需要其他文件,比如说某些静态资源,我们同样可以使用COPY放到镜像当中去。要注意第一个参数为宿主机的地址,后面的参数为镜像地址。宿主机的地址可以使用相对路径,即./*.jar。

比如说:

powershell 复制代码
ADD /home/user/test.tar.gz /opt  #此操作会自动将test.tar.gz解压

3.CMD/ENTRYPOINT

powershell 复制代码
CMD ["--server.port=8080"]
ENTRYPOINT ["java","-jar","/app.jar"]

设置容器的启动命令,也就是我们docker run时,容器里面所执行的命令。

CMD和ENTRYPOINT有什么区别?

ENTRYPOINT 作为启动命令时无法被docker run覆盖(如果docker run指定命令,会被认为成ENTRYPOINT的参数)

如果ENTRYPOINT和CMD指令同时存在,则CMD的相关内容会被设置成ENTRYPOINT的参数

4.EXPOSE

shell 复制代码
EXPOSE 8080

指定容器对外暴露的端口,即docker容器启动后,通过什么端口访问它呢?一般情况下都配置成我们的tomcat端口。

构建镜像

1.将我们的Dockerfile文件编写完成后,和需要打成镜像的jar包放到同一目录下。

2.docker build -t 名字(自己随便起)

例如docker build -t test:1.0.1

即镜像包的名称为test,版本号为1.0.1。如果不写后面的版本号,则版本号默认为latest。

3.查看打包好的镜像 docker images

4.启动镜像

shell 复制代码
docker run -d test

5.查看实例

shell 复制代码
docker ps -a

6.根据查询到达容器名,进入容器,启动成功

shell 复制代码
docker exec -it fa8f36aef96e /bin/bash
相关推荐
theo.wu1 分钟前
使用Buildpacks构建Docker镜像
运维·docker·容器
K3njuan10 分钟前
《数据结构》学习系列
学习
结衣结衣.13 分钟前
C++ 类和对象的初步介绍
java·开发语言·数据结构·c++·笔记·学习·算法
limengshi1383923 小时前
通信工程学习:什么是RIP路由信息协议
网络·网络协议·学习·智能路由器·信息与通信
xiaobuding_QAQ3 小时前
自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)
单片机·嵌入式硬件·学习·proteus
Starry_hello world3 小时前
二叉树实现
数据结构·笔记·有问必答
wei_shuo4 小时前
偏标记学习+图像分类(论文复现)
学习·分类·数据挖掘
Miqiuha5 小时前
lock_guard和unique_lock学习总结
java·数据库·学习
一 乐6 小时前
学籍管理平台|在线学籍管理平台系统|基于Springboot+VUE的在线学籍管理平台系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习
加油,旭杏6 小时前
【中间件学习】fastCG介绍和使用
学习·nginx·fastcgi