docker学习笔记二

知识点:

1)手动构建镜像

2)Dockerfile快速构建镜像

3)Docker生产环境部署和实践

4)自建本地私有仓库

5)harbor私有仓库搭建

 

阿里云yum源
https://developer.aliyun.com/mirror/

镜像制作
nginx镜像实例

 

创建并运行centos容器

[root@izm5edykqg8tzid352ga0iz mysql]# docker pull centos   //以centos为基础
[root@izm5edykqg8tzid352ga0iz mysql]# docker run -it centos /bin/bash
[root@696cd0ad637b /]#   //已经进入容器

更新容器yum源并安装nginx

[root@8ab2b9d7afab yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@8ab2b9d7afab yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@8ab2b9d7afab yum.repos.d]# yum -y install nginx

退出该容器,然后基于该容器做一个镜像

[root@izm5edykqg8tzid352ga0iz mysql]# docker commit -m "my nginx" e1edeef7375f(容器名or容器ID) danny/nginx:v1(镜像名:版本号)
sha256:a5d464ef190c80411161ec6193b877eb5592a1961aeb318e341a9f9c46a39d05
[root@izm5edykqg8tzid352ga0iz mysql]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
danny/nginx         v1                  a5d464ef190c        2 minutes ago       427 MB      //基于mynginx容器制作的镜像
docker.io/nginx     latest              71c43202b8ac        4 days ago          109 MB
docker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB
docker.io/alpine    latest              11cd0b38bc3c        8 weeks ago         4.41 MB

[root@izm5edykqg8tzid352ga0iz mysql]# docker run -dit --name nginxv1 danny/nginx:v1
[root@92c8d3a4bc2a /]# 
[root@92c8d3a4bc2a /]# ps -ef  //已经进入容器
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 08:21 ?        00:00:00 /bin/bash
root        16     1  0 08:21 ?        00:00:00 ps -ef
[root@92c8d3a4bc2a /]# vim /etc/nginx/nginx.conf    //修改配置文件添加 daemon off;      //不在后台运行
[root@92c8d3a4bc2a /]# nginx -t        //验证配置文件语法是否有误
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@92c8d3a4bc2a /]# exit
exit

[root@izm5edykqg8tzid352ga0iz mysql]# docker commit -m "my nginx" 92c8d3a4bc2a danny/nginx:v2        //再次提交修改版本v2
sha256:062c8ef6e694b94fec7213bc8c65a055d75dc968fe2b671d97826381e0259f48

[root@izm5edykqg8tzid352ga0iz mysql]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
danny/nginx         v2                  062c8ef6e694        9 seconds ago       427 MB        //修改后提交的版本
danny/nginx         v1                  a5d464ef190c        12 minutes ago      427 MB
docker.io/nginx     latest              71c43202b8ac        4 days ago          109 MB
docker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB
docker.io/alpine    latest              11cd0b38bc3c        8 weeks ago         4.41 MB

[root@izm5edykqg8tzid352ga0iz mysql]# docker run -it -p 82:80 danny/nginx:v2 /usr/sbin/nginx        //启动v2版本的容器
08df10e92f9df846a840d61d10d07c045397e40ff06d9b4afdc09e4840266d23

[root@izm5edykqg8tzid352ga0iz mysql]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
08df10e92f9d        danny/nginx:v2      "/usr/sbin/nginx"   13 seconds ago      Up 12 seconds       0.0.0.0:82->80/tcp   optimistic_bardeen

然后就可以通过82端口访问了 http://IP:82

 

列出镜像变更历史

docker history 镜像名

 

Dockerfile构建(快速构建镜像)

常用指令
FROM   指定基础镜像
MAINTAINER   维护者信息

ENV 指定环境变量  例:

ENV JAVA_HOME /usr/local/jdk1.8_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin

RUN   加在命令前执行命令
ADD   copy文件,会自动解压
WORKDIR   相当于cd进目录
VOLUME   目录挂载
EXPOSE    端口

USER  设置启动容器的用户,可以是用户名或UID

USER daemon
USER UID

 

ENTRYPOINT指令和CMD指令详解

ENTRYPOINT 指定启动容器时执行的命令

Dockerfile中的ENTRYPOINT指令和CMD指令都可以设置容器启动时要执行的命令,但用途是有略微不同的。

ENTRYPOINT指令和CMD指令虽然是在Dockerfile中定义,但是在构建镜像的时候并不会被执行,只有在执行docker run命令启动容器时才会起作用。

 

注意:

在Dockerfile中,只能有一个ENTRYPOINT指令,如果有多个ENTRYPOINT指令则以最后一个为准。

在Dockerfile中,只能有一个CMD指令,如果有多个CMD指令则以最后一个为准。

在Dockerfile中,ENTRYPOINT指令或CMD指令,至少必有其一

 

1. ENTRYPOINT指令

首先,执行docker run如果带有其他命令参数,不会覆盖ENTRYPOINT指令。

不过,docker run的--entrypoint可以覆盖Dockerfile中ENTRYPOINT设置的命令,后续文章详述。

1) exec格式用法(推荐)

ENTRYPOINT ["top","-b", "-H"]
exec格式,也被称为JSON风格["command","arg1"]。

在创建容器实例执行docker run命令时,设置的任何命令参数或CMD指令的命令,都将作为ENTRYPOINT指令的命令参数,追加到ENTRYPOINT指令的命令之后。

如,在Dockerfile中有如上ENTRYPOINT指令的情况下,执行docker run <container_name> -v启动容器。则容器启动后执行的第一条完整命令如下:

top -b -H -v

即将-v作为top的追加参数。

2) shell格式用法

ENTRYPOINT top -b -H
这种格式屏蔽追加任何参数,即CMD指令或docker run ... <command>的参数都将被忽略。

采用shell格式,在创建容器后会首先调用Shell,即自动在命令前面追加/bin/sh -c。如,对于上述定义,在容器启动时执行的第一条命令如下:

/bin/sh -c top -b -H

这样,ENTRYPOINT指令设置的top命令就不是容器中的第一个进程PID 1,这样在容器停止的时候就无法收到系统的SIGTERM信号。要想收到SIGTERM信号,务必使用Bash的内置exec命令使得top的PID 1,定义ENTRYPOINT指令如下:

ENTRYPOINT exec top -b -H (常用)

2. CMD指令

首先,执行docker run如果带有其他命令参数,将会覆盖CMD指令。

如果在Dockerfile中,还有ENTRYPOINT指令,则CMD指令中的命令将作为ENTRYPOINT指令中的命令的参数(CMD和ENTRYPOINT指令必须采用JSON风格,即exec格式,定义)。

1) exec格式用法(推荐)

CMD ["echo","hello", "world"]
exec格式,也被称为JSON风格["command","arg1"]。

这种格式,在容器执行时不会调用任何Shell,即不会进行命令中的变量替换。要进行Shell处理,需要将sh直接加入到命令中:

CMD ["sh", "-c", "echo $HOME"]    (sh -c 这种方式可能会常常见到,具体解释可参考https://www.cnblogs.com/FengZeng666/p/14821142.html)
这样,$HOME才会被解析为真实的主目录。

但是并不推荐将sh加入到CMD指令中,因为CMD指令的命令往往作为ENTRYPOINT指令的追加参数,因而如下形式更常见:

CMD ["-c","echo world"]

2) shell格式用法

CMD echo $HW
这种格式,在创建容器后会首先调用Shell,即自动在命令前面追加/bin/sh -c,即上述设置将执行如下命令:

/bin/sh -c echo $HW

 

示例:

每个 Dockerfile 只能有一条 CMD 命令。如果指定了多条命令,只有最后一条会被执行。

如果用户启动容器时候指定了运行的命令,则会覆盖掉 CMD 指定的命令
vim /opt/dockerfile/nginx/dockerfile
#This docker file
#VERSION 1
#Author:danny
#Base image
FROM centos

#
MAINTAINER danny  danny@qq.com

#Commands
RUN rpm -ivh https://mirrors.aliyun.com/centos/7.5.1804/extras/x86_64/Packages/epel-release-7-9.noarch.rpm

RUN yum -y install nginx

ADD index.html  /usr/share/nginx/html/index.html   #ADD会自动解压

RUN echo "daemon off;" >> /etc/nginx/nginx.conf

EXPOSE 80

CMD ["nginx"]

[root@izm5edykqg8tzid352ga0iz nginx]# docker build -t mynginx:v3 /opt/dockerfile/nginx/

 

查看镜像制作结果

[root@izm5edykqg8tzid352ga0iz nginx]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mynginx             v3                  3cf3c3308849        8 minutes ago       429 MB
danny/nginx         v2                  062c8ef6e694        2 hours ago         427 MB
danny/nginx         v1                  a5d464ef190c        2 hours ago         427 MB
docker.io/nginx     latest              71c43202b8ac        4 days ago          109 MB
docker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB
docker.io/alpine    latest              11cd0b38bc3c        8 weeks ago         4.41 MB

制作并启动容器
[root@izm5edykqg8tzid352ga0iz nginx]# docker run -dit -p 82:80 --name mynginx_1 mynginx:v3 /usr/sbin/nginx
c373c95329937126d3e879e78c24843f026547975185ce1b6ea655f8f8d5420d
[root@izm5edykqg8tzid352ga0iz nginx]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
c373c9532993        mynginx:v3          "nginx"             4 seconds ago       Up 4 seconds        0.0.0.0:82->80/tcp   mynginx_1

[root@izm5edykqg8tzid352ga0iz nginx]# curl -I http://localhost:82
HTTP/1.1 200 OK
...

 

比较ENTRYPOINT与CMD指令

ENTRYPOINT指令,往往用于设置容器启动后的第一个命令,这对一个容器来说往往是固定的。
CMD指令,往往用于设置容器启动的第一个命令的默认参数,这对一个容器来说可以是变化的。
docker run <command>往往用于给出替换CMD的临时参数。

 

 --link使用

1)先创建启动源容器mysql

docker run --name mysql --restart=always  -d  -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6

2)创建启动接收容器tomcat --link 源容器(被连接容器)mysql

docker run -d --name  接收容器名(#一般是tomcat) --link 源容器(被连接容器)(#一般是mysql) --restart=always  源容器镜像名
         
docker run -d -p 8080:8080 --name tomcat --link mysql --restart=always -v /data/tomcat/webapps:/usr/local/tomcat/webapps tomcat

当使用--link时,docker会自动在被连接容器内创建基于–link参数的环境变量。
在接收容器中执行: env | grep -i hub_name
会显示源容器的的环境变量

接下来在tomcat容器的webapps中配置msyql连接,数据源输入mysql的容器名即可

 

--link 参数可以把两个容器连接为一组容器,一般用于连接mysql,而不用映射mysql的端口到宿主机
--link 主要用来解决两个容器的连接问题

例如,tomcat和mysql建立link之后,在tomcat里可以直接ping通mysql的容器名.
在tomcat配置MySQL连接的文件中不需要再写入localhost或者ip地址,直接写入mysql容器名即可连接到mysql数据库

 

 

常用自定义镜像示例:

自定义JDK镜像

FROM centos:latest
MAINTAINER wkcto
ADD jdk-8u121-linux-x64.tar.gz /usr/local
ENV JAVA_HOME /usr/local/jdk1.8.0_121
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin
CMD java -version

构建镜像:docker build -t wkcto_jdk1.8.0_121 .
运行镜像:docker run -d ac84bde53958

 

自定义 Tomcat 镜像
定义 Dockerfile 文件:
FROM wkcto_jdk1.8.0_121  #指定上面制作的镜像为基础镜像
MAINTAINER wkcto
ADD apache-tomcat-8.5.24.tar.gz /usr/local/
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.24
ENV PATH $PATH:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-8.5.24/bin/catalina.sh run

构建镜像:docker build -t wkcto-tomcat-8.5.24 .
运行镜像:docker run -d -p 8080:8080 ab41b5f48256

 

自定义 MySQL 镜像
定义 Dockerfile 文件:
FROM centos:centos6
MAINTAINER wkcto 
RUN yum install mysql-server mysql -y
RUN /etc/init.d/mysqld start &&\ 
 mysql -e "grant all privileges on *.* to 'root'@'%' identified by '123456' WITH 
GRANT OPTION ;"&&\ 
 mysql -e "grant all privileges on *.* to 'root'@'localhost' identified by '123456' 
WITH GRANT OPTION ;"&&\
 mysql -uroot -p123456 -e "show databases;" 
EXPOSE 3306
CMD /usr/bin/mysqld_safe
构建镜像:docker build -t wkcto-mysql .
运行镜像:docker run -d -p 3306:3306 09ce279d92df
 
 
自定义 Redis 镜像
定义 Dockerfile 文件:
FROM centos:latest
MAINTAINER wkcto
RUN yum install epel-release -y && yum install redis -y && yum install net-tools -y
EXPOSE 6379
CMD /usr/bin/redis-server –protected-mode no

构建镜像:docker build -t wkcto-redis .
运行镜像:docker run -d -p 6379:6379 390583cf0531

 

自定义tomcat镜像2

FROM centos
MAINTAINER xxx
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u842-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.53.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_242
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.53
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.53
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE 8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/1ocal/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh", "run"]
CMD /usr/local/apache-tomcat-8.5.53/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.53/bin/logs/catalina.out

 

Docker生产环境部署和实践

Docker安装Nginx

[root@docker ~]# docker pull nginx
[root@docker ~]# docker run --name nginx -p 8081:80 -d nginx

Nginx部署

#创建目录nginx
[root@docker ~]# mkdir -p ~/nginx/{www,logs,conf}
#拷贝容器内Nginx默认配置文件到本地当前目录下的conf目录
[root@docker ~]# docker cp b2c013828445:/etc/nginx/nginx.conf ~/nginx/conf/
#编辑网页
[root@docker ~]# cat ~/nginx/www/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>恨君不似江楼月</title>
</head>
<body>
    <h1>只有相随</h1>
    <p>无别离。</p>
</body>
</html>
#映射挂载
[root@docker ~]# docker run -d -p 8082:80 --name nginx-test-web -v ~/nginx/www/:/usr/share/nginx/html -v ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v ~/nginx/log:/var/log/nginx 602e111c06b6    #镜像ID

 

Docker安装PHP

#拉取官方镜像
[root@docker ~]# docker pull php:5.6-fpm
#启动php
[root@docker ~]# docker run --name myphp-fpm -v ~/nginx/www:/www -d php:5.6-fpm
#修改配置
[root@docker ~]# mkdir nginx/conf/conf.d
[root@docker ~]# vim nginx/conf/conf.d/test-php.conf
server {
    listen          80;
    server_name     localhost;
    location / {
        root    /usr/share/nginx/html;
        index index.html index.htm index.php;
    }
    error_page  500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
    location ~ \.php$ {
        fastcgi_pass    php:9000;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME /www/$fastcgi_script_name;
        include         fastcgi_params;
    }
}
#启动服务
[root@docker ~]# docker run --name runoob-php-nginx -p 8083:80 -d -v ~/nginx/www:/usr/share/nginx/html:ro -v ~/nginx/conf/conf.d:/etc/nginx/conf.d:ro --link myphp-fpm:php nginx
#-p 8083:80    端口映射,把nginx中的80映射到本地的8083端口
#~/nginx/www是本地html文件的存储目录,/usr/share/nginx/html是容器内html文件的存储目录
#~/nginx/conf/conf.d是本地nginx配置文件的存储目录,/etc/nginx/conf.d是容器内nginx配置文件的存储目录
#--link myphp-fpm:php 把myphp-fpm的网络并入nginx,并通过修改nginx的/etc/hosts,把域名php映射成127.0.0.1,让nginx通过php:9000访问php-fpm 

#编辑测试页面
[root@docker ~]# vim nginx/www/index.php
<?php
    echo phpinfo();
?>

 

自建私有仓库

本地镜像服务器

仓库配置

[root@dockerhub ~]# docker pull registry
[root@dockerhub ~]# docker run -d -v /registry:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest
#--restart=always docker服务重启时容器会随之启动
#--privileged=true 扩展权限
#目录映射的目的是防止docker私有仓库这个容器被删除时,仓库里的镜像也会被删除

配置支持http方式推送镜像

docker私有仓库服务器默认是基于https传输,需要在客户端做相关设置,不使用https传输
每一个要使用http方式访问私有镜像仓库的机器上的docker都要配置insecure-registries

[root@docker ~]# vim /etc/docker/daemon.json
{
    "registry-mirrors": ["https://sopn42m9.mirror.aliyuncs.com"],
    "insecure-registries":["192.168.213.129:5000"]
}
[root@docker ~]# systemctl restart docker

 

上传镜像到镜像仓库

#给hello-world镜像打个tag,表示新的版本
[root@docker ~]# docker tag hello-world 192.168.213.129:5000/hello-world:latest
#将新的hello-world镜像上传到私有仓库
[root@docker ~]# docker push 192.168.213.129:5000/hello-world:latest
The push refers to repository [192.168.213.129:5000/hello-world]
9c27e219663c: Pushed
[root@docker ~]# docker pull 192.168.213.129:5000/hello-world

 

 在私有仓库192.168.42.141查看上传的镜像
[root@dockerhub ~]# ls /registry/docker/registry/v2/repositories/
hello-world

 

 

 harbor的安装使用

 简介:

Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。

作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

    • 基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。

    • 镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。

    • 图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。

    • AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。

    • 审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。

    • 国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。

    • RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。

    • 部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备

 

搭建harbor

Harbor需要在Docker与Docker-compose组件上运行

Harbor官方地址: https://github.com/goharbor/harbor/releases

先安装docker-compose

 

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
或
curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

新版本
curl -L https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

注:如果上面地址失效,可直接官网去下载 https://github.com/docker/compose/releases 

 

给docker-compose添加执行权限

chmod +x /usr/local/bin/docker-compose

查看docker-compose是否安装成功

$ docker-compose -version
docker-compose version 1.25.0, build 0a186604

 

下载Harbor的压缩包(本次安装 v2.0.1)

wget https://github.com/goharbor/harbor/releases/download/v2.0.1/harbor-offline-installer-v2.0.1.tgz
tar -xzf harbor-offline-installer-v2.0.1.tgz
mkdir /opt/harbor
mv harbor/* /opt/harbor
cd /opt/harbor

修改Harbor的配置,没有的话复制harbor.yml.tmpl

vim harbor.yml 
修改hostname和port
hostname: 192.168.1.1  #harbor服务访问IP/域名,如果需要外网访问,就填外网IP
port: 85

注意:修改harbor.yml配置文件后,需要执行./prepare,再重启生效

安装Harbor

./prepare
./install.sh
#如果需要支持存储helm的chart包,添加如下参数
./install.sh  --with-chartmuseum

 

可能会出现的问题一:

✖ Need to upgrade docker package to 17.06.0+.

centos 7 默认安装的docker较低,升级即可

#卸载旧版本
yum -y remove docker*

#更新yum源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#查看docker版本
yum list docker-ce --showduplicates | sort -r

#安装新版docker即可
yum -y install docker-ce-18.06.3.ce-3.el7

#启动docker
systemctl start docker.service

 

可能会出现的问题二:

 vim harbor.yml (注释掉https配置即可)

 

可能会出现的问题三:

failed to initialize logging driver: dial tcp 127.0.0.1:1514

vim /etc/rsyslog.conf
$ModLoad imtcp
$InputTCPServerRun 1514

systemctl restart rsyslog.service

然后再重启harbor即可

 

可能出现的问题四:

Network harbor_harbor  Error                                                                                                                                                           0.1s
failed to create network harbor_harbor: Error response from daemon: Failed to program FILTER chain: iptables failed: iptables --wait -I FORWARD -o br-8c6a374389d8 -j DOCKER: iptables v1.4.21: Couldn't load target `DOCKER':No such file or directory

Try `iptables -h' or 'iptables --help' for more information.
 (exit status 2)

重启docker即可

systemctl restart docker

 

harbor后台页面访问

192.168.1.1:85  默认用户名密码admin/Harbor12345 账号密码可在配置文件里修改

 

启动、停止Harbor

docker-compose up -d 启动
docker-compose stop 停止
docker-compose restart 重新启动

 

推送镜像验证

先需要将仓库添加到docker配置里面

$ vim /etc/docker/daemon.json
{
  "registry-mirrors": ["https://sopn42m9.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.1.1:85"]  #填harbor访问地址即可,此处写的什么地址,下面docker登录就用什么地址
}
$ systemctl daemon-reload
$ systemctl restart docker.service

下载测试镜像

docker pull nginx

给镜像重新打标签

docker tag nginx 192.168.1.1:85/library/nginx:latest

登录Harbor仓库

[root@k8s-n1 harbor]# docker login 192.168.1.1:85
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

退出登录

docker logout 192.168.1.1:85

 

上传镜像(推送命令格式可在harbor后台查看)

[root@k8s-n1 harbor]# docker push 192.168.1.1:85/library/nginx:latest
The push refers to repository [192.168.1.1:85/library/nginx]
6c7de695ede3: Pushed
2f4accd375d9: Pushed
ffc9b21953f4: Pushed
latest: digest: sha256:8269a7352a7dad1f8b3dc83284f195bac72027dd50279422d363d49311ab7d9b size: 948
 
其他docker客户端如果要使用该harbor仓库,docker需要添加如下配置
指定镜像仓库地址:
$ vim /etc/docker/daemon.json
{
"insecure-registries": ["192.168.1.1:85"]
}

$ systemctl restart docker

下载测试镜像

docker pull 192.168.1.1:85/library/nginx:laster

 

posted @ 2018-09-03 17:06  叮伱格斐呃  阅读(414)  评论(0编辑  收藏  举报
Live2D