docker笔记

1、安装docker,就不在介绍了,网上随意都是,参考:http://www.runoob.com/docker/centos-docker-install.html。但是需要注意的是,安装完成后,需要配置镜像加速地址,用阿里的地址也好,网易的也罢,其他的也行。自己做笔记,就说下阿里云的加速地址怎么搞,进入https://dev.aliyun.com,登录。

83e2a40b6246f2b3bef1e97723f8cfea18d.jpg

6c8ce061c33990a744f53eda93c0a59eab3.jpg

4ec195cffe15afea4b1f5e314b3ca53b48b.jpg

这个地址就是你的阿里加速地址

网易加速地址:http://hub-mirror.c.163.com

搞完后自己测试下,测试方法网上也都有。

2、下载dotnet镜像,镜像可以在docker hub上查看相关介绍,上面也介绍有怎么使用,这个东西比较大,得等一会。

docker pull microsoft/dotnet

3、我的docker是在linux上面安装的,所以我把发布好的网站放在linux下,然后在项目的跟目录添加一个Dockerfile文件:

#基于microsoft/dotnet来构建我们的镜像,后面可跟版本号,不跟默认最新
FROM microsoft/dotnet
#拷贝当前路径下的文件到镜像文件中的/dockertest文件夹中  
COPY . /dockertest
#设置工作目录为 dockertest文件夹,即容器启动默认的文件夹
WORKDIR /dockertes
#设置Docker容器对外暴露6000端口(这里应该还是容器中的端口,不是本地端口,未实验,不能确定)
EXPOSE 6000
#使用`dotnet SampleProject.dll`来运行应用程序
CMD ["dotnet", "SampleProject.dll"]

4、然后将项目生成镜像,注意后面还有一个点

docker build -t dockertest .

生成完成后可以运行docker images命令来查看镜像是否生成

5、然后运行镜像,运行成功会出现一串字符串,运行失败会出现错误原因,出现错误可以进入docke内部执行命令查看具体什么原因,后解。60000端口是本地端口,6000是docker的端口

docker run -d -p 60000:6000 dockertest

6、运行成功,没问题,然后执行命令curl http://localhost:60000即可看到你网站输出的内容,表示成功。

 

踩坑:

  An assembly specified in the application dependencies manifest (xxxxx.deps.json) was not found:
    package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1'
    path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'
  This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
    aspnetcore-store-2.0.0-linux-x64.xml;aspnetcore-store-2.0.0-osx-x64.xml;aspnetcore-store-2.0.0-win7-x64.xml;aspnetcore-store-2.0.0-win7-x86.xml

.net coer部署docker时候一直报错,这个错误原因是因为系统缺少东西,2种解决方案,一种是在操作系统中安装对应的包,另一种是程序发布时候将这个包一起打包在发布包中,不依赖系统,需要配置下解决方案。

解决方案一(没试过):apt-get install aspnetcore-store-2.0.0

解决方案二(使用的):右键你的项目->编辑xxx.csproj->在PropertyGroup标签中添加:

<PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>

添加完成后的样子

  <PropertyGroup>
    <TargetFramework>netcoreapp2.0</TargetFramework>
    <PublishWithAspNetCoreTargetManifest>false</PublishWithAspNetCoreTargetManifest>
  </PropertyGroup>

然后重新发布网站,你会发现会多非常多的文件和文件夹,添加这个配置意思是打包所有相关依赖项。默认是不配置的,因为一般系统都安装有默认的程序包,但docker比较纯净所以没有这些。

 

docker相当于一个简易的linux操作系统,所以相关操作需要映射

进入容器:

docker run -itd 镜像 /bin/bash

docker attach 容器

以上两条命令进入容器有弊端,说是一个窗口阻塞会影响到其他窗口,所以推荐另一种方式

docker exec -it 容器id /bin/sh

退出容器操作:exit即可断开连接。

 

查看所有容器:docker ps -a

查看正在运行容器:docker ps

停止容器:docker stop 容器id

删除容器:docker rm 容器id

查看所有镜像:docker images

删除镜像:docker rmi 镜像名|镜像id

docker重启:systemctl restart docker

语法:docker run -p 本地端口:docker端口 镜像

 

CentOS卸载docker:

首先查看下docker:yum list installed | grep docker

7f57f699261a7f46c6daea24d776c60e0e6.jpg

然后将容器服务停止:service docker stop

然后执行命令卸载:

删除安装包

yum remove docker.x86_64

yum remove docker-client.x86_64

yum remove docker-common.x86_64

删除docker镜像

rm -rf /var/lib/docker

 

 

Dockerfile在build过程中会依次执行文件中的内容,实际上, docker 做的事, 也就是从基础镜像启一个容器, 然后执行一条命令, 修改之后提交此容器为新镜像. 以此类推, 直到所有命令都执行完. 所以在得到最终构建的镜像时, 会生成很多"中间镜像". 而如果 Dockerfile 中某条命令有错, 也是在当前中止, 过程中的"中间镜像"及"当前构建用的容器"仍然存在的.

 

参考资料:

http://www.cnblogs.com/stulzq/p/8628019.html

 

https://www.cnblogs.com/Leo_wl/p/5666669.html

http://www.bamn.cn/course/volume/4943

https://www.cnblogs.com/mahidol/p/9064943.html

 

 

 

转载于:https://my.oschina.net/uwith/blog/1839657

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值