一、容器管理
1.1容器命令
docker ps :查看正在运行的容器 ,已经关闭的不能查看 `docker ps -a`(显示所有容器) 可以
docker -f rm MyWordPress:-f 强制删除容器
[root@localhost ~]# docker ps -a -q #显示所有容器只显示进程号
d5e7b06bc162
891c4dd2bdc8
2e4b69330b0f
a61e545e5822
docker rm -f $(docker ps -a -q)#删除所有镜像
[root@localhost ~]# docker exec db ls / #查看容器db根目录下文件
bin
boot
dev
docker-entrypoint-initdb.d
etc
home
lib
lib32
lib64
libx32
media
mnt
opt
proc
root
[root@localhost ~]# docker exec -it db /bin/bash ###登入容器
root@a61e545e5822:/# ls
bin dev etc lib lib64 media opt root sbin sys usr
boot docker-entrypoint-initdb.d home lib32 libx32 mnt proc run srv tmp var
root@a61e545e5822:/# dcd /
bash: dcd: command not found
root@a61e545e5822:/# cd /
root@a61e545e5822:/# touch 1.txt
root@a61e545e5822:/# ls
1.txt boot docker-entrypoint-initdb.d home lib32 libx32 mnt proc run srv tmp var
bin dev etc lib lib64 media opt root sbin sys usr
root@a61e545e5822:/#
1.2 run延伸
修改容器名
--add-host hostname:IP #修改文件命
**docker rm ***
二、镜像、仓库管理
2.1 镜像特性
2.2 Docker构建msql镜像
获取centOS镜像
注册网易蜂巢
->控制台,注册登录->设置用户名
注意:不要下载7.0以上版本,CMD不能运行
————————————————————————————————————————————————————————————
Docker安装mysql
hub.c.163.com/public/centos:6.5-tools
Docker可以后台运行
docker pull hub.c.163.com/public/centos:6.5-tools
[root@localhost ~]# docker run --name mysql -d hub.c.163.com/public/centos:6.5-tools
d5c8669af7722778b51f1c018cdd4a3f26c82f947d6db42d71b40d47260c8911
#--name 别名mysql
#-d 后台运行ggf
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d5c8669af772 hub.c.163.com/public/centos:6.7-tools "/usr/bin/supervisord" About a minute ago Up About a minute 22/tcp mysql
[root@localhost ~]# docker exec -it mysql /bin/bash #进入容器
yum -y install mysql mysql-server #下载mysql
systemctl start mysql #启动mysql
chkconfig mysqld on
mysqladmin -uroot password123
mysql -uroot -p
password:123
mysql>create database DockerMysql;
show databases;
exit
Docker构建mysql镜像
docker commit mysql mysql:5.1## mysql转换成镜像
#查看
docker images
#运行
docker run --name mysql-my -d mysql#mysql镜像运行
#查看
docker ps -a
####再使用mysql查看数据库
service mysqld start
mysql -uroot -p123
show databases;
****里面有DockerMysql
2.3 Dockerfile安装Tomcat
准备环境:mkdir tomcat
放入下面两个包
tomcat
JDK
apache-tomcat-9.0.1.tar.gz
jdk-8u151-linux-x64.tar.gz
#创建Dockerfile文件
FROM hub.c.163.com/public/centos:6.7
MAINTAINER zhangyifan@itxdl.cn
ADD ./apache-tomcat-9.0.1.tar.gz /root
ADD ./jdk-8u151-linux-x64.tar.gz /root
ENV JAVA_HOME /root/jdk1.8.0_151
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 8080
ENTRYPOINT /root/apache-tomcat-9.0.1/bin/startup/.sh && tailf /root/apache-tomcat-9.0.1/logs/catalina.out
##构建Tomcat镜像
docker build -t tomcat:v1.0 .
##看到这行运行成功
Step 8/8 : ENTRYPOINT /root/apache-tomcat-9.0.1/bin/startup/.sh && tailf /root/apache-tomcat-9.0.1/logs/catalina.out
---> Running in 03e4802e6c0c
---> 9c5ab545f0ad
Removing intermediate container 03e4802e6c0c
Successfully built 9c5ab545f0ad
##查看镜像
[root@localhost tomcat]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat v1.0 9c5ab545f0ad About an hour ago 790 MB
##运行镜像
docker run --name tomcat -p 80:8080 -d tomcat:v1.0
[root@localhost tomcat]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
45942a717313 tomcat:v1.0 "/bin/sh -c '/root..." 4 seconds ago Up 4 seconds 22/tcp, 0.0.0.0:80->8080/tcp tomcat
0e40ca4911e7 hub.c.163.com/public/centos:6.5-tools "/usr/bin/supervisord" 24 minutes ago Up 24 minutes 22/tcp mysql
登录192.168.159.128
2.4 docker常用命令
docker ps ##查看运行容器
docker stop ** ##停止运行容器
docker rm ** ##删除 ##停止运行才能删除
**:ID/NAME
docker ps -a ##查看所有容器
docker rm $(docker ps -a)#删除所有容器
docker images ##查看镜像
docker rmi ID/NAME ##删除镜像
docker rmi $(docker ps -a)
三、Docker构建官方私有仓库
3.1 准备环境
网易蜂巢写可以存储自己的公开镜像,但是要存不能被别人看见的镜像,需要购买私有镜像;
但是我们可以自己构建存储私有镜像
准备环境: 192.168.159.128 192.168.159.129
**第二台安装Docker配置阿里云;阿里云加速器
其中重启报错:Job for docker.service failed because the control process exited with error code. See “systemctl status docker.service” and “journalctl -xe” for details.
**
解决方法:
mv /etc/docker/daemon.json /etc/docker/daemon.conf
systemctl daemon-load
systemctl restart docker
3.2 建立镜像仓库
docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always registry
vim /etc/docker/daemon.json###这个文件对192.168.159.129配置
{
"insecure-registries":["192.168.159.128:5000"]##空格4
}
上传镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat v1.0 41a0bdd5632e 5 hours ago 790 MB
###修改标签ID
[root@localhost ~]# docker tag tomcat:v1.0 192.168.159.128:5000/tomcat:v1.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat v1.0 41a0bdd5632e 5 hours ago 790 MB
192.168.159.128:5000/tomcat v1.0 41a0bdd5632e 5 hours ago 790 MB
[root@localhost ~]# docker push 192.168.159.128:5000/tomcat:v1.0##上传
curl -XGET http://192.168.159.128:5000/v2/_catalog##查看已有镜像
{"repositories":["tomcat"]}
scp /etc/docker/daemon.json 192.168.159.129:/etc/docker
客户机下载镜像
客户机192.168.159.129
systemctl restart docker
docker pull 192.168.159.128:5000/tomcat:v1.0 ##下载
[root@localhost Docker]# docker images ##查看
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.159.128:5000/tomcat v1.0 41a0bdd5632e 6 hours ago 790 MB
[root@localhost Docker]# docker run --name tomcat -p 80:8080 -d 192.168.159.128:5000/tomcat:v1.0 ##运行
78ffede353ff9b71d958437bf760ee668b67314f39221b058985483d4418ab0f
[root@localhost Docker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
78ffede353ff 192.168.159.128:5000/tomcat:v1.0 "/bin/sh -c '/root..." 5 seconds ago Up 4 seconds 22/tcp, 0.0.0.0:80->8080/tcp tomcat
浏览器登录192.168.159.129验证
四、Harbor构建私有仓库
4.1 Harbor简介
VMware开源的企业级Registry项目Harbor,以Docker公司开源的registry 为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文,主要特点:
-
基于角色的访问控制 - 用户与 Docker 镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
-
镜像复制 - 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
-
图形化用户界面 - 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
-
AD/LDAP 支持 - Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
-
审计管理 - 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
-
国际化 - 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
-
RESTful API - RESTful API 提供给管理员对于 Harbor 更多的操控, 使得与其它管理软件集成变得更容易。
-
部署简单 - 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台(OVA 方式)虚拟设备
4.2 Harbor架构介绍
Harbor运行起来有如下容器:
如上图所描述,Harbor由6个大的模块所组成:
-
Proxy: Harbor的registry、UI、token services等组件,都处在一个反向代理后边。该代理将来自浏览器、docker clients的请求转发到后端服务上。
-
Registry: 负责存储Docker镜像,以及处理Docker push/pull请求。因为Harbor强制要求对镜像的访问做权限控制, 在每一次push/pull请求时,Registry会强制要求客户端从token service那里获得一个有效的token。
-
Core services: Harbor的核心功能,主要包括如下3个服务:
1)UI: 作为Registry Webhook, 以图像用户界面的方式辅助用户管理镜像。
2)WebHook:WebHook
是在registry中配置的一种机制, 当registry中镜像发生改变时,就可以通 知到Harbor的webhook endpoint。 Harbor使用webhook来更新日志、初始化同步job等。
3)Token 服务:负责根据用户权限给每个docker push/pull命令签发token. Docker 客户端向 Regiøstry服务发起的请求,如果不包含token, 会被重定向到这里,获得token后再重新向Registry进行 请求。
-
Database:
为core services提供数据库服务,负责储存用户权限、审计日志、Docker image分组信息等数据。 -
Job services: 主要用于镜像复制,本地镜像可以被同步到远程Harbor实例上。
-
Log collector: 负责收集其他组件的日志到一个地方
这里我们与上面运行的7个容器对比,对harbor-adminserver
感觉有些疑虑。其实这里harbor-adminserver
主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui所要操作的所有数据都通过harbor-adminserver
这样一个数据配置管理中心来完成。
4.3 Harbor的实现
Harbor的每一个组件都被包装成一个docker容器
。自然,Harbor是通过docker compose
来部署的。在Harbor源代码的make目录下的docker-compose模板会被用于部署Harbor。打开该模板文件,可以看到Harbor由7个容器组件所组成:
proxy:
通过nginx服务器来做反向代理
registry:
docker官方发布的一个仓库镜像组件
ui:
整个架构的核心服务。该容器是Harbor工程的主要部分
adminserver:
作为Harbor工程的配置数据管理器使用
mysql:
通过官方Mysql镜像创建的数据库容器
job services:
通过状态机的形式将镜像复制到远程Harbor实例。镜像删除同样也可以被同步到远程Harbor实例中。
log:
运行rsyslogd的容器,主要用于收集其他容器的日志
这些容器之间都通过Docker内的DNS服务发现来连接通信。通过这种方式,每一个容器都可以通过相应的容器来进行访问。对于终端用户来说,只有反向代理(Nginx)服务的端口需要对外暴露。
4.4 部署Harbor
准备环境
一台安装了python 、docker、docker-compose的机器
Harbor下载office版
[root@localhost ~]# ls
harbor-offline-installer-v2.6.2.tgz
tar -xzvf harbor-offline-installer-v2.6.2.tgz
mv harbor /usr/local/ #存放harbor持久化数据
4.5 创建https证书以及配置目录相关权限
可以不配置
#创建私钥*.key
openssl genrsa -des3 -out server.key 2018
#创建证书签名请求文件.csr
openssl req -new -key server.key -out server.csr
#退出验证密钥
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
#生成自签名证书*.crt,生成的证书文件包含公钥
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
mv server.* /data/cert/
4.6 配置相关文件
cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
vim harbor.yml
1 # Configuration file of Harbor
2
3 # The IP address or hostname to access admin UI and registry service.
4 # DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
5 hostname: yifan.com //设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost。默认情况下,harbor使用的端口是80,若使用自定义的端口,除了要改docker-compose.yml文件中的配置外,这里的hostname也要加上自定义的端口,否则在docker login、push时会报错
6
7 # http related config
8 http:
9 # port for http, default is 80. If https enabled, this port will redirect to https port
10 port: 81
11
12 # https related config
13 #https:
14 # https port for harbor, default is 443
15 # port: 443
16 # The path of cert and key files for nginx
17 # certificate: /data/cert/server.crt
18 # private_key: /data/cert/server.key
19
20 # # Uncomment following will enable tls communication between all harbor components
21 # internal_tls:
22 # # set enabled to true means internal tls is enabled
23 # enabled: true
24 # # put your cert and key files on dir
25 # dir: /etc/harbor/tls/internal
26
27 # Uncomment external_url if you want to enable external proxy
28 # And when it enabled the hostname will no longer used
29 # external_url: https://reg.mydomain.com:8433
//如果要启用外部代理,比如外层的NGINX、LB等,请取消注释external_url,当它启用时,hostname将不再使用。
30
31 # The initial password of Harbor admin
32 # It only works in first time to install harbor
33 # Remember Change the admin password from UI after launching Harbor.
34 harbor_admin_password: yifan123 //admin密码
35
36 # Harbor DB configuration
37 database:
38 # The password for the root user of Harbor DB. Change this before any production use.
39 password: root123
40 # The maximum number of connections in the idle connection pool. If it <=0, no idle connections are retained.
41 max_idle_conns: 50
42 # The maximum number of open connections to the database. If it <= 0, then there is no limit on the number of open connections.
43 # Note: the default number of connections is 1024 for postgres of harbor.
44 max_open_conns: 900
45 持久化数据目录
46 # The default data volume
47 data_volume: /usr/local/harbor
安装
./install.sh
访问页面
yifan.com:81 admin yifan123
在新建项创建yifan_first
五、Harbor的使用(上传下载镜像)
5.1 告诉docker安全域名
vim /etc/docker/dademon.json
{
"insecure-registries":["yifan.com:81"]
}
vim /etc/hosts
192.168.159.128 yifan.com```
**登录**
```bash
docker login yifan.com:81
admin
password:密码 #harbor.yml文件
5.2 准备要上传的镜像
随便准备一个镜像
docker run --name tomcat1 -p 80:8080 -d tomcat:v1.0
4842aa2a7820ea7c3aa4ef93783938ec729eaa412d6291596c55e3e481f7bd34
[root@localhost harbor]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4842aa2a7820 tomcat:v1.0 "/bin/sh -c '/root/a…" 11 seconds ago Up 10 seconds 22/tcp, 0.0.0.0:80->8080/tcp, :::80->8080/tcp tomcat1
修改tomcat镜像标签
docker tag tomcat:v1.0 yifan.com:81/yifan_first/tomcat:v1.0 把tomcat:v1.0修改
[root@localhost harbor]# docker images##要上传的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
yifan.com:81/yifan_first/tomcat v1.0 41a0bdd5632e 2 days ago 790MB
5.3 主机上传镜像
259.128登陆上传
[root@localhost ~]# docker login -u admin -p yifan123 yifan.com:81
Login Succeeded
docker push yifan.com:81/yifan_first/tomcat:v1.0
然后浏览器yifan.com:81查看harbor新建项目yifan_first
5.4 159.129客户机下载
报错信息
“冒号太多”
解决办法
- 修改
vim /usr/local/harbor/harbor.yml
hostname: yifan.com
# http related config
http:
# port for http, default is 80. If https enabled, this port will redirect to https port
port: 81
vim /etc/hosts
192.168.159.128 yifan.com
vim /etc/docker/daemon.json
{
"insecure-registries":["yifan.com:81"]
}
登录
[root@localhost ~]# docker login -u admin -p yifan123 yifan.com:81
Login Succeeded
docker pull yifan.com:81/yifan_first/tomcat:v1.0
v1.0: Pulling from yifan_first/tomcat
4f4fb700ef54: Pull complete
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
yifan.com:81/yifan_first/tomcat v1.0 41a0bdd5632e 2 days ago 790 MB
[root@localhost ~]# docker run --name tomcat -p 80:8080 -d yifan.com:81/yifan_first/tomcat:v1.0
ef02db17396c9a67c11dbb73fbd55a3e8c5965e48a194d1b5466410ac45ebf48
浏览器查看192.168.159.129