Docker

Docker安装

#添加阿里云的yum源
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装docker ce
yum install docker-ce -y

#阿里云的centos 8 安装docker 时提示:
#package docker-ce-3:19.03.8-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed
#则先安装containerd
dnf install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpm

#查看docker版本
docker -v

 

Docker配置

修改启动文件,监听远程端口

#修改,开启远程管理端口(注意:外网要限制2375端口)
vim /usr/lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://10.6.66.236:2375
安全参考:https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface
#重启 
systemctl daemon
-reload
systemctl enable docker.service
systemctl restart docker.service

#查看docker info
docker info

 

Docker镜像加速器

使用阿里云镜像加速器提升获取Docker官方镜像的速度

#创建目录  -p 不存在就创建  
sudo
mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://rrn1rf2c.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

 

Docker镜像仓库

选择一:阿里云ACR

地址:https://www.aliyun.com/product/acr 

#登录仓库
sudo docker login --username=用户名 registry.cn-shanghai.aliyuncs.com
#按提示输入用户名密码登录

#pull / tag / push

选择二:使用Registry自建Docker仓库

#安装加密工具
yum install httpd-tools  -y

#设置认证密码   用户名 fmp  密码 123456
mkdir /opt/registry-var/auth/ -p
htpasswd  -Bbn fmp 123456  > /opt/registry-var/auth/htpasswd

#启动容器,在启动时传入认证参数
docker run -d -p 5000:5000 --restart=always -v /opt/registry-var/auth/:/auth/ -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

#修改配置文件,使之支持http ,否则登录的时候会报错
vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.6.66.229:5000"]
}
#重启docker
systemctl restart docker.service

#登录,输入用户名密码
docker login 10.6.66.229:5000

#http访问:http://10.6.66.229:5000/v2/_catalog

选择三: 使用Harbor自建Docker仓库

参考:

Harbor仓库介绍与搭建过程

Harbor1.5.0仓库使用教程

 

Docker常用操作

镜像 pull/tag/push  容器 run    /*实际应用,更多使用dockerfile进行配置运行*/

#search
docker search nginx
#pull
docker pull nginx
#tag(注意最后一个参数,要和仓库路径一致:仓库地址/命名空间/仓库名称:镜像版本号)
docker tag nginx  10.6.66.229:5000/fmp/mynginx:1.0
#push
docker push 10.6.66.229:5000/fmp/mynginx:1.0

#run -d 后台运行  -p  端口映射
docker run -d -p 80:80 nginx 
#run 启动并进入容器  -it 交互式
docker run -it nginx:latest  /bin/bash
#run 启动,并挂载卷
docker run -d -p 80:80 -v /data:/usr/share/nginx/html nginx:latest
#run 自动启动
docker run  --restart=always 

#删除所有停止的容器
docker container prune

#如果run的时候,忘记加某个参数了,可以使用docker update命令
docker update redis --restart=always
#将容器提交为新的容器
docker commit -a "fmp" -m "mynginx" a404c6c174a2 mynginx:v1
#查看容器详细信息
docker container inspect 容器名称/id

#容器重命名
docker rename 原容器名  新容器名

#查看容器日志
docker logs id
#进入容器
docker exec -it nginx /bin/bash
#退出容器,回到宿主机
ctrl+p & ctrl+q

 

DockerFile

VS->项目上右键点击->添加-Docker支持

#Runtime
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2-stretch-slim AS base WORKDIR /app EXPOSE 80
#使用SDK编译项目 FROM mcr.microsoft.com
/dotnet/core/sdk:2.2-stretch AS build WORKDIR /src COPY ["xplan/xplan.csproj", "xplan/"] RUN dotnet restore "xplan/xplan.csproj" COPY . . WORKDIR "/src/xplan" RUN dotnet build "xplan.csproj" -c Release -o /app #发布 FROM build AS publish RUN dotnet publish "xplan.csproj" -c Release -o /app
#运行 FROM base AS final WORKDIR
/app COPY --from=publish /app . ENTRYPOINT ["dotnet", "xplan.dll"]

 参考:ASP.NET Core 2.1 使用Docker运行

加速镜像构建的技巧

将本项目的DLL和第三方的DLL,分别使用多行COPY命令;

原理:docker 客户端会把上下文中的所有文件发送给 docker daemon,分多个命令,没有变化的文件,会使用上一次build的缓存

参考:https://www.cnblogs.com/sparkdev/p/9573248.html

dotnet restore 还原包的速度很慢,可以给dotnet restore 命令加上 :--configfile NuGet.Config

指定nuget 为 azure的cdn源

nuget.config 内容



  
    
  

  

 

 

Docker容器编排

使用docker-compose编排容器

参考:

Docker-compose命令详解

Docker系列之(五):使用Docker Compose编排容器 

#安装
curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version

#编写
docker-compose.yml :详见后续步骤
  
#进入文件目录
#启动
docker-compose up

#后台启动:
docker-compose up -d  

#停止:
docker-compose stop 

使用docker stack编排容器(推荐)

Docker Compose和Docker Stack区别

docker stack 官方文档

Docker Stack 和 Docker Compose 的一个区别是,Stack 不支持构建。这意味着在部署 Stack 之前,所有镜像必须提前构建完成。

Docker Stack实践

Docker Stack命令

1) docker stsack deploy
用于根据 Stack 文件(通常是 docker-stack.yml)部署和更新 Stack 服务的命令。
2) docker stack ls
会列出 Swarm 集群中的全部 Stack,包括每个 Stack 拥有多少服务。
3) docker stack ps
列出某个已经部署的 Stack 相关详情。该命令支持 Stack 名称作为其主要参数,列举了服务副本在节点的分布情况,以及期望状态和当前状态。
4) docker stack rm
命令用于从 Swarm 集群中移除 Stack。移除操作执行前并不会进行二次确认。

 

Compose file

Compose file 官方文档

 

 

 

使用Compose file,创建一个wordpress引用

#创建文件目录
mkdir /opt/my_wordpress/
cd /opt/my_wordpress/

#编写编排文件
vim docker-compose.yml
version: '2'
services:
   db:
     image: mysql:5.7
     volumes:
       - /data/db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress
   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - /data/web_data:/var/www/html
     ports: 
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress 

 浏览:http://ip:8000 

 

Docker容器集群

 参考: Kubernetes vs. Docker Swarm:完整的比较指南

 

Docker Swarm

 

Docker Swarm常用命令

docker swarm init   用于创建一个新的 Swarm。执行该命令的节点会成为第一个管理节点,并且会切换到 Swarm 模式。
docker swarm join-token
  用于查询加入管理节点和工作节点到现有 Swarm 时所使用的命令和 Token。
  要获取新增管理节点的命令,请执行 docker swarm join-token manager 命令;
  要获取新增工作节点的命令,请执行 docker swarm join-token worker 命令。
docker node ls   用于列出 Swarm 中的所有节点及相关信息,包括哪些是管理节点、哪个是主管理节点。
docker service create   用于创建一个新服务。
docker service ls   用于列出 Swarm 中运行的服务,以及诸如服务状态、服务副本等基本信息。
docker service ps   该命令会给出更多关于某个服务副本的信息
docker service inspect   用于获取关于服务的详尽信息。附加 --pretty 参数可限制仅显示重要信息。
docker service scale   用于对服务副本个数进行增减。
docker service update   用于对运行中的服务的属性进行变更。
docker service logs   用于查看服务的日志。
docker service rm   用于从 Swarm 中删除某服务。该命令会在不做确认的情况下删除服务的所有副本,所以使用时应保持警惕。



Kubernetes


 

 

 

 

全局参考

Docker 容器入门

Docker教程:Docker入门实践(精讲版)

Docker — 从入门到实践

 

docker安装mysql挂在数据卷至宿主机 

#在宿主机上创建数据目录
mkdir /my/mysql/data

#运行mysql容器
sudo docker run --name mysqldb --restart=always  -d -v /my/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=Pwd@159357 -p 3306:3306 mysql

 

 

 

 

你可能感兴趣的:(Docker)