从零搭建docker服务

docker是以一个开源的虚拟化部署工具,能够让人从繁杂的项目部署及管理中解脱出来

docker从入门到实践

之前公司全部用的手动后台启动,包括内部服务和所用的组件(mysql,redis等),环境多了之后难以管理,出现了而很多痛点。后来决定采用docker改变现状。

需要的工具

  1. docker
  2. docker-compose,进行多容器应用的部署和管理,用起来会更方便

安装docker及docker-compose

sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo curl -L 'https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64' -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

执行sudo docker run hello-world成功说明docker安装成功
执行docker-compose version成功说明docker-compose安装成功

遇到问题可尝试重启网络服务:service network restart

docker默认安装路径:/var/lib/docker 注:镜像和容器也在这里
docker-compose安装路径:/usr/local/bin/docker-compose

Docker错误创建覆盖挂载到无效参数

镜像容器存储路径配置

如上所说docker镜像和容器的默认存储位置为/var/lib/docker,但可能会产生磁盘占满的情况,从而导致很多错误,比如:
E138: Can’t write viminfo file /root/.viminfo!
[35381] INTERNAL ERROR: cannot create temporary directory!

在这里插入图片描述

为避免这种异常情况发生,可以选择修改docker镜像和容器的存储位置,以/home/docker/lib为例

1. 停止docker服务   systemctl stop docker
2. mkdir -p /home/docker/lib
3. 如果之前已经有数据在/var/lib/docker,则mv /var/lib/docker/* /home/docker/lib/,否则不用此操作
4. 修改docker配置 vim /usr/lib/systemd/system/docker.service	
   ExecStart=/usr/bin/dockerd --graph /home/docker/lib
5. 重新enable 一下docker 服务 重新进行软连接 以及进行一次 daemon-reload
   systemctl disable docker
   systemctl enable docker
   systemctl daemon-reload
   systemctl start docker
6. 查看docker info信息

在这里插入图片描述

centos卸载docker

yum list installed|grep docker
yum -y remove  docker.x86_64   docker-client.x86_64  docker-common.x86_64
rm -rf  /var/lib/docker   #删除已存在的镜像和容器(以实际情况docker配置路径而定)

卸载docker-compose

sudo rm /usr/local/bin/docker-compose  #删除二进制文件即可

实施过程

  1. 搭建私有企业级docker仓库

作为企业内部docker服务,考虑到安全性和传输速度可靠性,需要搭建私有的docker仓库,用来存储企业内部的镜像文件。
目前市场上有两种docker仓库供选择:docker registry 和docker harbor
docker registry是docker官方提供,docker harbor是vmware开源,提供ui界面

相比较而言,docker registry更加轻量,部署更加方便。

docker官方示例:(启动docker registry通过docker原生启动

这里提供一个docker-compose方式启动的yml

version: "3"

services:
  registry:
    image: registry:2
    restart: always
    environment:
      REGISTRY_AUTH: htpasswd
      REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
      REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
    volumes:
      - /etc/localtime:/ect/localtime:ro
      - /var/lib/registry:/var/lib/registry
      - /var/lib/registry/auth:/auth
    expose:
      - 5000
    ports:
      - '5000:5000'

以测试环境为示例,生产环境使用添加证书等参见官方文档

配置密码

docker run --entrypoint htpasswd registry:2.7.0 -Bbn testuser testpassword > /var/lib/registry/auth/htpasswd
重新启动服务:docker-compose up -d

ontainer_linux.go:349: starting container process caused "exec: “htpasswd”: executable file not found报错详解

配置密码后无法直接通过curl -XGET 127.0.0.1:5000/v2/_catalog在服务器上查看仓库中有哪些镜像
但可通过浏览器访问登录查看

查看镜像版本列表:curl -XGET 127.0.0.1:5000/v2/image_name/tags/list

  1. 将服务打成镜像

dockerfile示例:

FROM ubuntu:16.04

MAINTAINER xxx "[email protected]"

# add project source code
RUN mkdir /code
ADD ./hqhttp /code   #hqhttp是运行的二进制文件

WORKDIR /code

EXPOSE 8821   

ENTRYPOINT ["./hqhttp"]

makefile示例:

version ?= test
date_str=`date +%Y-%m-%d\ %H:%M:%S`
code_ver=`git log --oneline -n1 | cut -f1 -d ' '`


.PHONY: all clean push

all:
	go build
	sudo docker build . -t hqht-hqhttp:$(version)

clean:
	-sudo docker rmi hqht-hqhttp:$(version)

push:
	sudo docker push hqht-hqhttp:$(version)

外部访问

首先需要配置私有registry地址

vim /etc/docker/daemon.json
{
    
    
    "insecure-registries": [
        "hub.docker.jiankunking.io:5000"
    ]
}
//多个私服写法,逗号分隔即可
{
    
    
    "insecure-registries": [
        "test.docker.jiankunking.io:5000", 
        "hub.docker.jiankunking.io:5000"   #优先级从前到后
    ]
}

此处不考虑证书配置
如果私有registry设置密码,则需要先登录

docker login ip:port

参考资料:

docker删除镜像时报错解决办法

docker官方文档 包含registry

Docker — 从入门到实践

docker registry搭建及配置用户认证

ontainer_linux.go:349: starting container process caused "exec: “htpasswd”: executable file not fo

Docker容器的重启策略及docker run的–restart选项详解

猜你喜欢

转载自blog.csdn.net/csdniter/article/details/108828327