Docker安装使用及私有仓库搭建

编程

1 概念

1.1 基本概念

Docker daemon

​ 守护进程,运行在宿主机上,用户通过DockerClient客户端Docker命令与Docker daemon交互。

Docker Client

​ Docker命令行工具。是用户使用Docker的主要方式。

Docker Image

​ 镜像。简单说就相当于root文件系统

Docker Container

​ 容器就是镜像的一个实例。容器创建、容器启动、容器停止、容器删除、容器暂停。

Docker Repository

​ 仓库是一个代码的控制空心,作用就是保存镜像。

1.2 容器与系统

CoreOS、其他操作系统、容器的网络架构、容器编排、容器集群、容器监控等。

2 Docker环境搭建

2.1 CentOS7 安装Docker

前提:

  1. CentOS6.5 以上,内核3.10及以上

    uname -a

  2. 更新yum源

    yum update

  3. 安装依赖

    yum install -y yum-utils device-mapper-persistent-data lvm2

  4. 替换阿里yum源

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  5. 安装docker-ce

    yum install -y docker-ce

  6. 启动docker服务端守护进程

    systemctl start docker

  7. 查看版本信息

    docker version

  8. 设置开机自启

    systemctl enable docker

2.2 配置阿里云加速镜像

​ 登录阿里云平台后进入“容器镜像服务”->"镜像工具"->"镜像加速器"

配置镜像加速器地址需替换成自己的

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-"EOF"

{

"registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]

}

EOF

sudo systemctl daemon-reload

sudo systemctl restart docker

3 Docker 命令

3.1 基本命令

run命令:通过镜像创建并启动容器

  • -i :交互式(可输入命令)
  • -t :终端或模拟终端
  • -d:以守护进程运行
  • -p:指定端口
  • -v:指定存储卷
  • --name:自定义容器名称
  • --restart=aways:当容器挂后自动重启

    exit:退出

    ps命令:查看容器状态

  • -a:查看所有容器
  • -a -q :展示所有容器ID
  • -n:列出指定数量容器

#列出最近前5个容器

docker ps -a -n 3

startstopestar 命令: docker start *ID* docker stop *ID*

停止所有容器:

docker stop $(docker ps -a -q)

exec命令:进入已启动的容器 (注意:使用exec进入容器后exit退出时,容器不会关闭)

docker exec -i -t 容器ID /bin/bash

attach命令:进入已启动的容器,exit退出后,容器关闭(不推荐)

rm命令:删除容器 rm *ID1* *ID2* ....

# 删除所有容器

docker rm -f $(docker ps -a -q)

-f:强制删除容器

kill命令:杀死正在运行的容器

docker kill 容器ID

pauseunpause命令:暂停回复

logs命令:查看日志

docker logs 容器ID

inspect命令:查看容器详细信息

docker inspect 容器ID

top命令:显示正在运行的容器进程信息

docker top 容器ID

3.2 容器管理

容器状态(STATUS)

  • Created:创建
  • Up:运行中
  • Pause:暂停
  • Exited:停止

    top命令:查看容器中运行的进程信息

    docker top 容器ID

    diff命令:检测容器中的文件系统变动

    stats命令:实时监控显示容器的资源使用情况

    docker stats 容器ID

3.3 镜像

​ 使用原则:有官方的就用官方镜像

查找镜像

#搜索httpd镜像

docker search httpd

拉取镜像

docker pull 镜像名称(如果不指定版本号,默认获取最新稳定版本的镜像latest),本地镜像保存路径"/var/lib/docker"

镜像列表

#查看镜像列表 

docker images

#查看所有镜像ID

docker images -q

镜像导出

docker save 镜像名称及版本 -o 导出的文件名称

docker save ubuntu:15.10 -o export-test.tar

删除镜像

docker rmi 镜像名称:版本 运行中的镜像需要先停掉再删除

  • -f 强制删除。

#多版本冲突删除

docker rmi 镜像名称/镜像名称:版本号

#删除所有镜像

docker rmi -f $(docker images -q)

镜像标签

重命名:

docker tag 镜像ID 源(可自定义)/镜像名称:版本

镜像创建

  1. 镜像提交

    docker commit 可以把容器打包成一个镜像,可以把容器你的数据也打包到镜像中。

  2. 镜像构建

  • docker build
  • dockerfile

镜像提交

将现有镜像push到docker hub仓库

  1. 登录

    docker login

    输入账号密码

  2. 自定义tag

    docker tag nginx:latest qinjuncai/nginx:v1.0

  3. 推送

    docker push qinjuncai/nginx:v1.0

3.4 仓库

3.4.1 公共仓库

DockerHub,参考官方说明

3.4.2 私有仓库

3.4.2.1 Docker-registry私有仓库

Docker公司提供:Docker-registry私有仓库组件

  1. 安装

## 拉取镜像

docker pull registry

## 启动容器

docker run -d -v /registry:/home/docker-registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest

  1. 验证

    ip:5000/v2(http://192.168.88.101:5000/v2/)

  2. 推送镜像到私有仓库

# 重命名Tag

docker tag nginx:latest localhost:5000/nginx:v2.1

# 推送镜像

docker push localhost:5000/nginx:v2.1

  1. 验证

    http://192.168.88.101:5000/v2/_catalog

  2. 拉取推送的镜像

    客户端deamon.json配置私有仓库地址

vi /etc/docker/daemon.json 

#添加私有仓库地址

{

"insecure-registry": ["192.168.88.101:5000"]

}

sudo systemctl daemon-reload

sudo systemctl restart docker

#拉取镜像

docker pull 192.168.88.101:5000/nginx:v2.1

3.4.2.2 Harbor 私有仓库

​ VMWare公司(中国团队)提供:Harbor企业级开源组件(推荐)

特点: 安全、标识和管理、镜像赋值、LDAP、国际化、GItHub开源、图形化用户界面、部署简单

  1. docker-compose安装

    Docker-compose GitHub地址

#安装docker-compose

curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

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

# 查看版本号,测试是否安装成功你可以通过修改URL中的版本,可以自定义您的需要的版本。

docker-compose version

  1. harbor安装

    Harbor GitHub地址

    下载离线包(600多M)

#解压

tar -xvf harbor-offline-installer-v1.10.10.tgz

cd harbor

#执行

./prepare

#修改配置.IP地址及端口修改(不能是localhost或127.0.0.1),admin密码也在此配置文件中

vi harbor.yml

#执行安装脚本

./install.sh

注意:如果不开启https 需注释掉harbor.html HTTPS部分内容,否则会报错

  1. 验证登录

    安装成功


    https://ip:端口(默认80,账号admin 密码:Harbor12345)

  2. 使用

  • 登录系统并创建项目

  • 添加用户

    系统管理-用户管理-创建用户

  • 添加用户到项目中

    项目-成员-添加用户-选择角色

  • 配置镜像地址

vi /etc/docker/daemon.json 

#添加私有仓库地址

{

# 这行是阿里云加速,需替换自己的

"registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],

"insecure-registries":["192.168.88.101"]

}

sudo systemctl daemon-reload

sudo systemctl restart docker

  • 登录仓库

docker login 192.168.88.101

#输入用户名密码

....

  • 推送镜像到私有仓库

    格式:docker tag 需要推送的镜像名称:版本 私有仓库IP/项目名称/镜像名称:版本

# 标记镜像

docker tag nginx:latest 192.168.88.101/test/nginx:v3.0

# 推送镜像

docker push 192.168.88.101/test/nginx:v3.0

  • 拉取镜像

docker pull 192.168.88.101/test/nginx:v3.0

3.4.3 三方仓库

​ 阿里云仓库,详见

3.5 基本命令小结

4 Dockerfile

4.1 命令

案例:通过dockerfile 创建镜像。拉取centos 并安装软件及开放端口

  1. 编写dockerfile

# 从哪一个基础镜像构建

FROM centos

# 定义作者信息

MAINTAINER "qinjuncai@qq.com"

# 定义一个变量

ENV newpath /tmp

# 设置登录以后工作路径(落脚点)

WORKDIR $newpath

# 执行你要的操作

#RUN yum -y install net-tools

# 开放指定的端口

EXPOSE 80

EXPOSE 22

# 执行命令

CMD echo $newpath

CMD echo "success.....OK"

CMD /bin/bash

  1. 执行dockerfile

docker build -f dockerfile -t qinjuncai/centos:v1 .

  1. 查看dockerfile执行细节

docker history qinjuncai/centos:v1

5 容器网络

5.1 外部访问容器

端口映射:容器与宿主机之间进行通讯

  • -p:小写的p指定端口映射 。宿主机:容器端口(多用于==生产环境==)
  • -P:大写的P随机映射

#启动容器,将容器80端口映射到宿主机8080端口,将443端口映射到443

docker run -itd -p 8080:80 -p 443:443 nginx /bin/bash

#启动容器,映射端口,高可用

docker run -itd -p 80:80 --restart=always nginx /bin/bash

#启动容器,随机映射端口

docker run -d -P nginx

#适用于宿主机多网卡,指定IP及端口映射

docker run -itd -p 192.168.88.101:8080:80 nginx --name web01 nginx /bin/bash

#查看容器端口暴露情况

docker port 717a97e90432

端口的暴露:Dockerfile EXPOSE 80

5.2 容器访问容器(容器互联)

# 创建Nginx容器1,命名Nginx01 使用自定义网络test-net 宿主90端口映射容器80端口

docker run -itd -p 90:80 --name nginx01 --network test-net nginx

# 创建Nginx容器2,命名Nginx02 使用自定义网络test-net 宿主91端口映射容器80端口

docker run -itd -p 91:80 --name nginx02 --network test-net nginx

# 分别查看容器详细信息(获取容器IP)

docker inspect a013498701df

docker inspect c61aed657a25

# 容器1 IP 172.19.0.2 容器2 IP 172.19.0.3

# 进入容器1 ping 172.19.0.3 能ping通 说明容器互联成功

docker exec -it c61aed657a25 /bin/bash

5.3 容器网络的模式

5.3.1 四种容器网络模式

1.host 模式

容器与宿主机共享IP,可设置不同端口号


2. container 模式

整合个容器共享独立网卡和IP

3. none模式 :没有网卡,没有IP 没有路由信息 只有lo

4.bridge模式(默认):即桥接模式

每个虚拟机拥有独立的IP和网卡,多个容器之间隔离,可通过宿主机互相访问。

5.3.2 自定义网络

# 创建网络

docker network create -d bridge test-net

# 查看网络

docker network ls

以上是 Docker安装使用及私有仓库搭建 的全部内容, 来源链接: utcz.com/z/520225.html

回到顶部