centos 的docker的安装和卸载

安装

#安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
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
或者
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
cp docker-ce.repo /etc/yum.repos.d
 
#更新源
yum clean all && yum mackecache
 
#检查版本
yum list docker-ce --showduplicates | sort -r
yum list docker-ce-cli --showduplicates | sort -r
 
#注意overlay2可能需要升级内核,它需要内核4.0以上支持:

#默认安装
yum install docker-ce docker-ce-cli containerd.io
 
#指定版本
yum install docker-ce-20.10.9-3.el7 \
docker-ce-cli-20.10.9-3.el7 \
containerd.io
 
#启动和查看
systemctl start docker
systemctl status docker
docker --version
docker info

卸载

  

查看是否安装docker

  1. docker info

  2. rpm -qa | grep docker

卸载 Docker 引擎、CLI 和 Containerd 软件包:

yum remove docker-ce docker-ce-cli containerd.io 
#或者使用 rpm  -e  docker-ce docker-ce-cli containerd.io

#查找出docker的相关文件夹  在根目录下查找
find -name 'docker'
 
#rm -rf 删除这些文件夹
rm -rf /var/lib/docker
rm -rf /var/lib/containerd 

docker命令

docker pull  镜像名                      拉取镜像

docker pull  镜像名:tag                拉取指定镜像版本

docker images                             查看镜像列表

docker images  镜像名称                 单独搜索镜像

docker rmi  -f 镜像名/镜像id             删除镜像

docker rmi  -f 镜像名/镜像id   镜像名/镜像id  镜像名/镜像id                    删除多个镜像

docker rmi  -f  $(docker images -aq)           删除所有镜像  -a 显示全部   -q只显示id

docker image  rm  镜像名/镜像id                 强制删除镜像

运行一个容器

docker run -it  -d --name  要取的别名  镜像名:tag  /bin/bash

-it 与容器进行交互式启动   -d 表示可以后台运行容器(守护式运行) 

--name  给要运行的容器起的名字   /bin/bash 交互路径

docker run -it  -d --name mysql  -p 8888:6379 mysql:5.7 /bin/bash

-p   通过访问宿主机8888 就可以映射到容器的6379端口

docker ps                                              查看正在运行的容器

docker ps -a                                          查看正在运行的容器和已经停掉的容器

docker exec  -it  容器id/容器别名  /bin/bash                 访问容器

exit                                                                                退出容器

docker stop  容器名/容器id                     停止容器(删除容器前需要停止容器)

docker   rm  -f  容器名/容器id                   删除容器

docker   rm  -f  容器名/容器id   容器名/容器id   容器名/容器id                         删除多个容器

docker   rm  -f  $(docker ps -aq)              删除全部容器

docker inspect 容器id                              获取容器的详细信息

docker logs  -f  容器id/容器名                  实时获取日志

docker logs  --tail 10  容器名/容器id        查看最新10行日志

安装私有镜像仓库

1.docker pull  registry:2.8.1     版本自己定

2. 运行

docker run -d -p 0.0.0.0:5000:5000 \
--name registry \
-v /data/registry/conf/config.yml:/etc/docker/registry/config.yml:ro \
-v /data/registry/data:/liang/my_registry \
registry:2.8.1

3.参数说明

默认情况仓库创建在容器的 /var/lib/registry 目录中,也就是我们上传到registry的私人服务器仓库的文件存储在 /var/lib/registry目录中,考虑权限,一般自己定义

-d  后台运行

-p  端口映射

-v  添加数据卷  格式  -v /宿主机目录:/容器目录   执行会自动创建文件夹

--privileged=true   Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied的解决办法

registry  镜像

4. 进入容器

在进入registry容器的时候的命令参数不能使用/bin/bash,而要使用:bin/shbashsh三个中的一个。输入命令进入registry容器:

docker exec -it 容器id  /bin/sh

可以看到 tmp中有个registry的文件夹

5. 提交容器副本为镜像

docker  commit  -m="说明"  -a=作者"  容器名字  自定义的镜像名字:版本

如下例子:

docker commit -m="ubuntu advanced version" -a="liang" liang-ubuntu16.04 ubuntu-advanced:v1

6.查看镜像私服上有哪些镜像

http://主机ip:映射端口/v2/_catalog

修改镜像为符合私服规范的Tag

docker  tag  镜像ID或镜像名:Tag  Host:Port/Repository:Tag

上面代码的参数含义如下所示:

(1)镜像ID或镜像名:要上传到私有库Registry的镜像ID或名字;
(2)Tag:要上传的镜像版本号;
(3)Host:本地私有库的映射网址(本文为0.0.0.0);
(4)Post:本地私有库的映射端口(本文为5000);
(5)Repository:Tag:上传到私有库Registry后自定义的镜像名字、版本号。

执行命令

docker tag ubuntu-advanced:v1 0.0.0.0:5000/ubuntu-advanced:v1

设置docker可以http访问

cat /etc/docker/daemon.json

如果没有 daemon.json  就创建

配置 insecure-registries

重启  systemctl restart docker 

测试  ip:5000/v2/_catalog

设置账号密码访问

mkdir -p /data/docker.registry/etc/registry/auth

安装工具

yum -y install httpd-tools

创建账号密码  admin 为用户名  123456 为密码

htpasswd -Bbn admin 123456 > /data/docker.registry/etc/registry/auth/passwd

在/data/docker.registry/etc/registry 中创建 config.yml

保存以下内容

# vi /data/docker.registry/etc/registry/config.yml
version: 0.1
log:
  fields:
    service: registry
storage:
  cache:
    blobdescriptor: inmemory
  filesystem:
    rootdirectory: /liang/my_registry
  delete: #配置删除权限,默认安装的Registry不支持删除
    enabled: true
http:
  addr: :5000
  headers:
    X-Content-Type-Options: [nosniff]
health:
  storagedriver:
    enabled: true
    interval: 10s
    threshold: 3

--------------------end-----------------------

运行以下命令

docker run -d -p 5000:5000 \
--name registry_private \
-v /data/docker.registry/etc/registry/auth:/etc/registry/auth \
-v /data/docker.registry/etc/registry/config.yml:/etc/docker/registry/config.yml \
-v /liang/my_registry/:/tmp/registry \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e "REGISTRY_AUTH_HTPASSWD_PATH=/etc/registry/auth/passwd"  registry:2.8.1

推送前需要登录

push 推送到私服

推送镜像的服务器的docker需要在daemon.json中配置出需要连接的私服的地址:

如下所示:

"insecure-registries":["101.11.11.32:5000"]
其中 101.11.11.32:5000就是需要推送的registry的地址和端口

docker push 符合私服规范的Tag的镜像名称或ID:版本号

docker push 0.0.0.0:5000/ubuntu-advanced:v1

通过 ip:5000/v2/_catalog  查看镜像

查看镜像的版本

ip:5000/v2/镜像名/tags/list

查看镜像的digest

curl --location --request GET 'http://ip:5000/v2/镜像名/manifests/版本' --header 'Accept: application/vnd.docker.distribution.manifest.v2+json'

删除镜像

curl --location --request DELETE 'http://ip:5000/v2/mysql/manifests/sha256:238cf050a7270dd6940602e70f1e5a11eeaf4e02035f445b7f613ff5e0641f7d' -ik

返回202成功

gc垃圾回收

docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml

# 垃圾回收(容器内执行命令)
docker exec -it <私有库的容器ID或者容器名> sh -c  ' registry garbage-collect /etc/docker/registry/config.yml'

registry garbage-collect /etc/docker/registry/config.yml
 

重启registry

如果 v2/_catalog 查看还存在镜像

就到config.yml中看 rootdirectory中配置的目录,

进入容器,进入该目录删除镜像 

如果启动registry时候对该目录做映射就在宿主机中进入映射的目录删除镜像 

拉取私服的镜像到本地并运行

docker pull Registry的网络映射:Registry的端口映射/私有库中的镜像名字:版本号

问题

1.docker 启动nginx容器后,浏览器访问不到

nginx容器启动起来了,但是容器中的nginx没有启动,需要去/usr/sbin中  ./nginx  启动

启动添加 /bin/bash  会出现容器起来了,容器里的服务没起来,可以去掉/bin/bash

docker安装nginx 并挂载目录

先拉取nginx镜像

docker pull nginx

2、查看是否拉取成功

docker images

3、使用命令在源主机上新建文件夹

1

mkdir -p nginx/{conf,log}

4、启动临时nginx

docker run -d --name nginx_test nginx

5、拷贝需要挂载的文件

docker cp nginx_test:/etc/nginx/conf.d /root/nginx/conf

docker cp nginx_test:/etc/nginx/nginx.conf /root/nginx/conf/nginx.conf

docker cp nginx_test:/usr/share/nginx/html /root/nginx

6、删除临时nginx

1

docker rm -f nginx_test

7、创建挂载的nginx

docker run -d --name nginx \

--network host \
-e TZ=Asia/Shanghai \

-v /root/nginx/conf/conf.d:/etc/nginx/conf.d \

-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \

-v /root/nginx/html:/usr/share/nginx/html \

-v /root/nginx/log:/var/log/nginx \

nginx

验证:机器地址出现下图就可以了

修改配置文件后 重启
docker exec nginx nginx -s reload


使用nginx代理registry的服务并配置ssl认证

在nginx的 conf.d中创建registry.conf

内容如下

#docker registry

map $upstream_http_docker_distribution_api_version $docker_distribution_api_version {
  '' 'registry/2.0';
}

server {
   listen   443 ssl;
   server_name registry.ss.cn;
   ssl_certificate /etc/nginx/conf.d/ssl/ss.cn_bundle.crt;
   ssl_certificate_key /etc/nginx/conf.d/ssl/ss.cn.key;
   ssl_protocols TLSv1.2 TLSv1.3;
   ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:10m;
   
   client_max_body_size 0;
   chunked_transfer_encoding on;
    
   location /v2/ {
      #allow 124.42.50.175;
      allow 106.121.103.16; 
      deny all;

      if ($http_user_agent ~ "^(docker\/1\.(3|4|5(?!\.[0-9]-dev))|Go ).*$" ) {
        return 404;
      }
      
      auth_basic "Registry realm";
      auth_basic_user_file /etc/nginx/conf.d/docker-registry.htpasswd;
      
      add_header 'Docker-Distribution-Api-Version' $docker_distribution_api_version always;
      
      proxy_pass http://127.0.0.1:5000;
      proxy_set_header  Host              $http_host;
      proxy_set_header  X-Real-IP         $remote_addr;
      proxy_set_header  X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header  X-Forwarded-Proto $scheme;
   }
}

其中密码配置使用

htpasswd -Bbn admin 123456 > /etc/nginx/conf.d/docker-registry.htpasswd

springboot 项目使用docker部署运行

使用jib插件打包镜像

在pom.xml中配置插件如下

<!--             Jib插件 打包项目镜像推送到阿里云或者是私有的hub仓库中 -->
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>1.7.0</version>
                <configuration>
                    <!-- 拉取所需的基础镜像 - 这里用于运行springboot项目 -->
                    <from>
                        <image>openjdk:alpine</image>
                    </from>
                    <!-- 最后生成的镜像配置 -->
                    <to>
                        <!-- push到阿里云镜像仓库,如果是其它镜像仓库,将下面地址替换掉即可 -->
                        <image>registry.私有仓库/镜像名:${project.version}-${image.release.version}</image>
                        <auth>
                            <username>账号</username>
                            <password>密码</password>
                        </auth>
                    </to>
                    <container>
<!-- 主类的包名 -->
                        <mainClass>com.xx.Application</mainClass>
                    </container>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

配置好后 在右边点击plugins -> jib --> jib:build 会把镜像推送到镜像远程仓库,然后启动就可以了。

注意:点击 jib:build 前要修改 ${image.release.version}  ,这个是镜像版本号。

还可以安装插件  docker registry explorer ,可以看到镜像仓库上传的镜像。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值