Docker安装基本命令以及私有仓库

早些年使用Redmine、Jenkins,安装是一个非常麻烦的工作,更别说Oracle等大应用安装,后来找到简便安装方式,bitnami 网站把各类应用封装在一个安装包中,是软件安装非常便捷,随后Docker的出现,让人们开始了解容器,随之而来的容器编排k8s。

刚接触电脑时候,我们会安装不同的操作系统,一台电脑如何才能安装多个操作系统,vmware是非常好用的虚拟机软件,在软件部署过程中实体机不够,可以通过VM标准化实施部署流程。

Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。 Docker 的基础是 Linux 容器(LXC) 等技术。
在 LXC 的基础上 Docker 进行了进一步的封装, 让用户不需要去关心容器的管理, 使得操作更为简便。 用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单。

Docker基本概念

镜像 可以用来创建Docker容器。

容器 从镜像创建的运行实例。

仓库 集中存放镜像文件的场所。

安装

 yum install -y docker-ce

systemctl start docker

chkconfig docker on

#卸载docker
yum remove docker docker-common docker-selinux docker-engine -y
#安装yum
yum install -y yum-utils device-mapper-persistent-data lvm2
#添加仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum install docker-ce -y

基本命令

#拖取镜像
docker pull 
#查看镜像
docker images
#载入镜像 
docker load 
#移除本地镜像 
docker rmi 
#命令来修改镜像的标签
docker tag 
#创建运行
docker run --name mysql_db -p 3307:3306  -v /home/docker/mysql/logs:/data/logs/mysql -v /home/docker/mysql/data:/var/lib/mysql -v /home/docker/mysql/conf/:/etc/mysql/conf.d -e MYSQL_DATABASE=opencart -e MYSQL_ROOT_PASSWORD=123456 -d mysql
#-v:冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径
#--name:自定义容器名,不指定时,docker 会自动生成一个名称
#-d:表示后台运行容器 容器启动后会进入后台。某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach 命令或 nsenter 工具等。
#-p:表示进行服务器与 Docker 容器的端口映射,默认情况下容器中镜像占用的端口是 Docker 容器中的端口与外界是隔绝的,必须进行端口映射才能访问
#-e:传递环境变量

#镜像进程
docker ps -a
#启动关闭容器
 docker stop mysql_db
 docker start mysql_db
#容器日志 
docker logs mysql_db
#交互可以进入容器,exec 也可以在宿主机对容器执行命令
docker exec -it mysql_db /bin/bash
#导入容器快照   
docker import URL
#删除容器  
docker rm  dockerName
#容器ID或容器名称强制停止容器
docker kill 
#仓库搜索   
docker search centos
#容器ID或容器名称查看容器内运行的进程
docker top 
#容器ID或容器名称查看容器内部细节
docker inspect 
#容器ID进到容器内
docker attach 
#容器ID:容器内的文件路径 宿主机路径从容器内拷贝文件到宿主机.
docker cp 
如:docker cp f9e29e8455a5:/tmp/yum.log /root
docker logs [OPTIONS] CONTAINER

OPTIONS说明:
  • -f : 跟踪日志输出

  • --since :显示某个开始时间的所有日志

  • -t : 显示时间戳

  • --tail :仅列出最新N条容器日志

docker logs --tail=1000 容器名称

Dockerfile 创建镜像

Dockerfile命令组成部分

部分命令
基础镜像信息FROM
维护者信息MAINTAINER
镜像操作指令RUN、COPY、ADD、EXPOSE、WORKDIR、ONBUILD、USER、VOLUME等
容器启动时执行指令CMD、ENTRYPOINT
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra

创建Docker私有仓库  

#拉取镜像
docker pull registry

#创建私有仓库
docker run -d -v /data/docker/registory:/var/lib/registry -p 5000:5000 --restart=always --privileged=true --name registry registry:latest

#拉取镜像
docker pull mysql 
#将mysql重新tag,注意:"/"前边是你的仓库所在服务器的ip+映射的端口
docker tag mysql:latest 172.18.11.126:5000/mysqltest:latest
#将其推送到私有仓库
docker push 172.18.11.126:5000/mysqltest:latest

#测试
#删除本地镜像
docker rmi 172.18.11.126:5000/mysqltest:latest
docker pull 172.18.11.126:5000/mysqltest:latest

push过程报错

Get https://172.18.11.126:5000/v2/: http: server gave HTTP response to HTTPS client

vi /etc/docker/daemon.json			//如果没有此文件,请创建,格式必须正确,否则无法启动服务
{
"registry-mirrors": [ "https://pee6w651.mirror.aliyuncs.com"],
"insecure-registries":["172.18.11.126:5000"]
}

重启Docker
systemctl daemon-reload
systemctl restart docker

查看私有仓库
curl http://172.18.11.126:5000/v2/_catalog

获取某个镜像的标签列表
curl http://172.18.11.126:5000/v2/[image_name]/tags/list

registry开启删除

#查看默认配置
docker exec -it  registry sh -c 'cat /etc/docker/registry/config.yml'
#开启删除(添加  delete: enabled: true)
docker exec -it  registry sh -c "sed -i '/storage:/a\  delete:' /etc/docker/registry/config.yml"
docker exec -it  registry sh -c "sed -i '/delete:/a\    enabled: true' /etc/docker/registry/config.yml"
#重启
docker restart registry

查询、删除镜像

#查询镜像
curl  <仓库地址>/v2/_catalog

#查询镜像tag(版本)
curl  <仓库地址>/v2/<镜像名>/tags/list

#删除镜像API
curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像digest_hash>"

#获取镜像digest_hash
curl  <仓库地址>/v2/<镜像名>/manifests/<tag> \
    --header "Accept: application/vnd.docker.distribution.manifest.v2+json"

Docker 数据卷管理

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer:ro
#ro 只读
#创建卷 
docker volume create portainer_data
#共享卷
docker run -d --name db3 --volumes-from db1 training/postgres
#备份
docker run --volumes-from mysql_db -v $(pwd):/backup mysql tar cvf /backup/backup.tar /var/lib/mysql
#恢复
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

注意:使用 --volumes-from 参数所挂载数据卷的容器自己并不需要保持在运行状态

Docker网络管理

外部访问容器

使用-p则需要指定对应的主机的端口应该到容器中的端口。支持的格式

IP:hostPort:containerPort | IP::containerPort | hostPort:containerPort 

docker run --name mysql_db -p 3307:3306  -v /home/docker/mysql/logs:/data/logs/mysql -v /home/docker/mysql/data:/var/lib/mysql -v /home/docker/mysql/conf/:/etc/mysql/conf.d -e MYSQL_DATABASE=opencart -e MYSQL_ROOT_PASSWORD=123456 -d mysql

#查看网络链路 iptables -t nat -nvL
查看网桥 brctl show 

查看网络模式: docker network ls

查看所有网卡:ip addr

查看网络路由:route -n

 tcpdum 抓包:

物理网卡:tcpdump -i ens33 -n -vvv tcp port 8000

docker0:tcpdump -i docker0 -n -vvv tcp port 8000

容器访问外网

配置容器DNS和主机名

配置主机名可以通过docker run的时候使用-h hostname指定主机名。

编辑/etc/docker/daemon.json

{
    "dns" : [
        "114.114.114.114",
        "8.8.8.8"
    ]
}

容器互联

link 方式互联 

docker run -d -P --name web --link db:alias_name training/webapp python app.py

容器之间相互通讯可以通过docker run中的--link=container_name:alias参数来达到效果。
此种方式可以很方便让容器使用容器名进行通讯,而不需要依赖IP地址,不过link方式仅仅解决了单机容器间的互联。

自定义网桥的方式进行互联

#创建命令 
docker network create --driver bridge zg_net
#检视创建的网络信息
docker network inspect zg_net
#查看docker的网络
docker network ls

#2个容器公用一个网络
docker run -it -d --name centos1 --network zg_net centos
docker run -it -d --name centos2 --network zg_net centos

Docker Compose

 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具。

管理工具

progrium/consul

Docker 可视化工具 portainer/portainer

参考:

Docker搭建私有仓库、查看私有仓库镜像

学习Docker之Dockerfile的命令

Docker卷管理

Docker的网络配置

Docker 学习 | 第六篇:容器网络配置

Docker三剑客之Docker Compose(七)

利用docker registry搭建私有仓库(自签发证书+登陆认证)

七、Docker网络模式详解_q908544703的博客-CSDN博客

Docker默认桥接网络是如何工作的 - 神王攻大人 - 博客园

​​​​​​由浅入深docker系列: (3)docker-compose - 知乎

https://www.cnblogs.com/renshengdezheli/p/16660989.html 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker 安装私有仓库通常涉及以下几个步骤: 1. **选择私有仓库解决方案**:Docker提供了一种名为`Docker Registry`的官方私有仓库服务,但也有第三方如Nexus、Artifactory等可选。根据需求,你可能选择使用这些服务,或者使用自托管的方式(比如在本地主机或服务器上搭建Registry)。 2. **安装Docker Registry**: - **官方Registry**:如果选择官方,可以使用`docker-registry`镜像,通过`docker run`命令创建一个容器,例如: ``` docker run -d -p 5000:5000 --name my-private-registry registry:2 ``` - **第三方服务**:按照对应软件的文档进行安装,比如Nexus的安装指南会指导你如何配置和启动。 3. **认证和授权**:私有仓库通常需要用户认证才能访问,你可以设置基本认证、OAuth或使用Registry提供的token系统。 4. **推送和拉取镜像**:在本地构建或下载镜像后,使用`docker push`将镜像推送到私有仓库,使用`docker pull`从仓库拉取镜像。 5. **配置Docker客户端**: - 对于Docker CLI,需要在`~/.docker/daemon.json`文件中添加registry配置,如: ```json { "registry-mirrors": ["http://your-private-registry-url:5000"] } ``` - 或者通过环境变量`DOCKER_CONTENT_TRUST=off`来跳过证书验证。 6. **更新镜像仓库设置**:如果你使用的是Dockerfile构建镜像,可以在Dockerfile中添加`--build-arg REGISTRY_URL=http://your-private-registry-url`,以便在构建时指向私有仓库
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值