Docker理论基础
Docker工作需要容器和镜像,它们是docker的基石
什么是容器
什么是镜像
-
镜像是一个模板,是运行一个应用程序所需的文件
-
容器是由镜像所创建的,用以隔离不同的镜像中的应用程序,这样应用于应用之间就不会相互干扰
常用docker命令
-
docker image ls / docker images
:查询所有的镜像 -
docker pull
:从Docker Hub中下载镜像-
docker rmi
:删除镜像- 删除所有镜像:
docker rmi -f $(docker images -q)
- 删除所有镜像:
-
-
docker build
:创建自定义镜像 -
docker run
:创建并允许一个容器 -
docker create
:创建容器 -
docker ps
:查询所有容器 -
docker start
:启动镜像 -
docker stop
:停止镜像 -
docker logs
:查询容器的运行日志记录 -
docker cp
:将文件复制到容器中 -
docker diff
:查看容器文件的变化 -
docker exec
:在容器中运行命令 -
docker tag
:为镜像分配标记(命名) -
docker login/logout
:从镜像仓库中登陆或注销 -
docker commit
:将修改的容器创建为镜像 -
docker push
:将镜像发布到仓库中 -
docker inspect
:查看容器的详细配置
编写Dockerfile创建自定义容器
dockerfile只需要简单理解为描述docker镜像规则的描述文件
FROM mcr.microsoft.com/dotnet/core/sdk:3.1
COPY dist /app
WORKDIR /app
#指令是声明运行时容器提供服务端口,这只是一个声明,在运行时并不会因为这个声明应用就会开启这个端口的服务
EXPOSE 80/tcp
ENTRYPOINT ["dotnet", "ExampleApp.dll"]
-
打包asp.net core项目
-
将包压缩并发送到linux服务器中,并解压
-
压缩后文件如下:
-
执行创建自定义容器命令
docker build [打包文件的路径] [-t 指定生成容器的名称] [-f 指定要执行的dockerfile名称]
ps:在docker里面镜像的名称不能有大写,只能用小写
容器创建
上面我们进行了镜像的创建,下面学习容器的创建
-
创建容器
docker create -p 外部端口:容器内部端口 -name 容器名 所要创建的容器(镜像名)
Ps:注意 这里有两个坑 :
一、部署asp.net core项目时,我们kestrel默认监听的是5000端口,并且只对允许使用localhost访问(即只有本机能访问),我们可以在program中如图中设置,外部计算机才能正常访问:
二、在项目部署到docker中时,在dockerfile中我们虽然声明监听的端口是80,但是我们kestrel监听的确是5000端口,此时,我们在宿主机映射端口时候,应该以kestrel监听的端口为准,否则将无法成功访问网页 -
启动容器
docker start 容器名
-
创建容器并运行
docker run [-d(表示后台运行)] [-p 宿主机端口:容器服务端口] [--rm(表示容器stop时,自动删除容器)] --nmae 容器名 镜像名
-
停止容器运行
docker stop 容器名
或docker kill 容器名
(建议少用) -
查看容器运行日志
docker logs [-f(表示实时查看日志)] 容器名称
操作正在运行容器
- 复制文件到容器内部之中