Docker入门笔记
随笔记录初学Docker遇到的问题, 以免下次再犯. 本机系统Ubuntu18.04
安装
Docker有2个版本
- Community Edition (CE) 社区版(免费)
- Enterprise Edition (EE) 企业版
- 删除旧版
sudo apt-get remove docker docker-engine docker.io
- 添加一些依赖包
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- 添加官方GPG Key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 添加apt私有仓库
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 安装Docker
sudo apt-get update
sudo apt-get install docker-ce
- 检测是否安装
docker --version
创建镜像
- 新建dotnet控制台项目
mkdir dotnet-test
cd dotnet-test
dotnet new console
- 创建Dockerfile并配置
# 使用官方dotnet运行时作为父镜像
FROM microsoft/dotnet:latest
# 设置工作目录
WORKDIR /app
# 拷贝.csproj到工作目录/app,然后执行dotnet restore恢复所有安装的NuGet包
COPY *.csproj ./
RUN dotnet restore
# 拷贝所有文件到工作目录(/app), 然后利用dotnet-cli发布应用到/app/out目录下
COPY . ./
RUN dotnet publish -c Release -o out
# Docker容器启动时运行
ENTRYPOINT [ "dotnet", "/app/out/dotnet-test.dll" ]
- 编译docker镜像
docker build -t dotnet-test .
- 查看并运行刚才创建的docker镜像
docker images
可以在输出列表中找到dotnet-test
所在行
docker run dotnet-test
运行镜像, docker run
命令其实是2条命令(docker create
, docker start
)结合的快捷方式
搭建私服并上传镜像
- 更换镜像源, 换成国内网易的源快一点
sudo vim /etc/default/docker
编辑此配置文件, 输入以下内容(注意换成自己IP)
# Docker Upstart and SysVinit configuration file
#
# THIS FILE DOES NOT APPLY TO SYSTEMD
#
# Please see the documentation for "systemd drop-ins":
# https://docs.docker.com/engine/admin/systemd/
#
# Customize location of Docker binary (especially for development testing).
#DOCKERD="/usr/local/bin/dockerd"
# Use DOCKER_OPTS to modify the daemon startup options.
#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"
DOCKER_OPTS="--registry-mirror=http://hub-mirror.c.163.com --add-registry 192.9.1.3:5000 --insecure-registry 192.168.1.3:5000"
# If you need Docker to use an HTTP proxy, it can also be specified here.
#export http_proxy="http://127.0.0.1:3128/"
# This is also a handy place to tweak where Docker's temporary files go.
#export DOCKER_TMPDIR="/mnt/bigdrive/docker-tmp"
https
问题
这个问题可能是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“192.168.1.3:5000”请求改为http
vim /etc/docker/daemon.json
创建并编辑此文件, 输入内容 {"insecure-registries":["192.168.66.100:5000"]}
- 重启docker
sudo service docker restart
- 拉取
registry
镜像, 并启动
docker pull registry
拉取registry
镜像
sudo docker run -d -p 5000:5000 -v /home/xueyou/Applications/docker/registry:/var/lib/registry registry
后台启动容器, 要用sudo
启动才能有网络权限
- 上传镜像到私服
docker tag dotnet-test:latest 192.168.1.3:5000/dotnet-test
标记镜像, 将本地镜像和远程私服关联
docker push 192.168.1.3:5000/dotnet-test
镜像上传到私服
docker rmi 192.168.1.3:5000/dotnet-test
删除本地镜像
docker pull 192.168.1.3:5000/dotnet-test
从私服下载镜像
Tips
- 有时候
registry
容器删不掉可以执行sudo killall docker-containerd-shim
然后docker重新运行容器