栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux学习—安装Docke制作镜像发布到Dockerhub

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux学习—安装Docke制作镜像发布到Dockerhub

安装docker出现的问题
  • 更新yum后,添加yum仓库
安装docker
yum install -y docker-engine
  • 出现错误
https://yum.dockerproject.org/repo/main/centos/7/repodata/repomd.xml: [Errno 14] curl#6 - "Could not resolve host: yum.dockerproject.org; 未知的错误"

解决:

http://mirrors.aliyun.com/non-supported/rhel/7/x86_64/repodata/repomd.xml: [Errno 14] HTTP Error 404 - Not Found
正在尝试其它镜像。

1 删除老仓库文件

cd /etc/yum.repos.d
rm *.*

2.卸载yum包

rpm -qa yum yum-3.4.3-150.el7.centos.noarch

卸载安装组件

rpm -qa | grep yum | xargs rpm -e --nodeps 
rpm -qa yum

3.下载最新的rpm包

在http://mirrors.163.com/centos/7/os/x86_64/Packages/ 这个目录下 找最新的rpm包,并下载。

yum-最新版.centos.noarch.rpm

yum-metadata-parser-最新版.x86_64.rpm

yum-plugin-fastestmirror-最新版.noarch.rpm

下载 wget 跟你找到最新软件包名称

4 安装yum

rpm -ivh yum-*

查看安装是否成功

rpm -qa yum

5. 导入证书

rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-7

6.添加阿里的源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

7.清除缓存 生成新的缓存

yum clean all
yum makecache
  • 失败后发现没有yum目录,原来下载出错,下载以下三个镜像

  • 重新运行:yum makecache即可成功;再次更新yum:yum update。

  1. [root@localhost soft]# sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
     
     [root@localhost soft]# sudo yum install docker-ce
     
     [root@localhost soft]# sudo systemctl daemon-reload
    [root@localhost soft]# sudo systemctl restart docker
    
    [root@localhost soft]# systemctl restart dockerdocker pull microsoft/aspnetcore     #拉取镜像
    
    
    [root@localhost soft]# systemctl daemon-reload
    [root@localhost soft]# systemctl restart docker                                     #打开docker
    
    [root@localhost soft]# docker images                                                #查看镜像
    
    [root@localhost soft]# docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer                                            #运行这个容器
    
    [root@localhost soft]# curl 192.168.126.128:9000              #访问,即可在浏览器进入GUI界面管理docker容器
    
  • 在docker里面下载centos镜像
[root@localhost ~]# docker run -it centos /bin/bash  
[root@1964faf36dd5 /]                            # 启动并进入容器
exit              #退出容器
docker ps -a           #列出当前正在运行的容器+历史运行过的容器

docker rm -f$(docker ps -aq)     #删除所有容器

[root@localhost ~]# docker logs -tf --tail 10 e08af09655db             #查看日志
[root@localhost ~]# docker run -it centos /bin/bash              #运行容器
[root@efbf181abf0b /]# [root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
efbf181abf0b   centos    "/bin/bash"   12 seconds ago   Up 11 seconds             eloquent_nash
[root@localhost ~]# docker exec -it centos /bin/bash
Error: No such container: centos
[root@localhost ~]# docker exec -it efbf181abf0b /bin/bash             #进入以及运行的容器
[root@efbf181abf0b /]# 
docker attach 容器id               #进入正在执行当前的代码的终端【退出:ctrl+q+p】

  • 将docker中的文件拷贝到Linux文件下
[root@localhost ~]# docker exec -it efbf181abf0b /bin/bash
[root@efbf181abf0b /]# 
[root@efbf181abf0b /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@efbf181abf0b /]# cd /home
[root@efbf181abf0b home]# ls
[root@efbf181abf0b home]# touch demo1.txt 
[root@efbf181abf0b home]# ls
demo1.txt
[root@efbf181abf0b home]# exit
exit                                                  #在docker内创建文件

[root@localhost local]# cd demo01/                    #进入Linux指定文件下
[root@localhost demo01]# ll
总用量 20
-rw-r--r--. 1 root root 357 4月  11 14:48 all2.zip
-rw-r--r--. 1 root root 320 4月  11 14:45 all.tar.gz
-rw-rw-rw-. 1 root root 978 4月  13 20:33 a.txt
-rw-r--r--. 1 root root 414 4月  12 16:14 hello.class
-rw-r--r--. 1 root root 102 4月  12 16:14 hello.java
[root@localhost demo01]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
efbf181abf0b   centos    "/bin/bash"   10 minutes ago   Up 10 minutes             eloquent_nash

[root@localhost demo01]# docker cp efbf181abf0b:/home/demo1.txt ./           #拷贝到当前目录下成功
[root@localhost demo01]# ll
总用量 20
-rw-r--r--. 1 root root 357 4月  11 14:48 all2.zip
-rw-r--r--. 1 root root 320 4月  11 14:45 all.tar.gz
-rw-rw-rw-. 1 root root 978 4月  13 20:33 a.txt
-rw-r--r--. 1 root root   0 4月  16 15:09 demo1.txt
-rw-r--r--. 1 root root 414 4月  12 16:14 hello.class
-rw-r--r--. 1 root root 102 4月  12 16:14 hello.java
docker常用命令
 
作业练习1 

docker安装Nginx

#1.搜索nginx镜像
docker search nginx

#2.拉取镜像
docker pull nginx

#3.运行nginx同时命名为nginx01,-p:宿主机端口到容器内部端口
[root@localhost ~]# docker run -d --name nginx01 -p 3344:80 nginx
7462febd62407a595ab551180b4bd866e37cca89bc746b5ed58907450ec0136b
[root@localhost ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES
7462febd6240   nginx     "/docker-entrypoint.…"   6 seconds ago   Up 4 seconds   0.0.0.0:3344->80/tcp, :::3344->80/tcp   nginx01

#4.测试能否访问成功
[root@localhost ~]# curl localhost:3344



Welcome to nginx!



Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

#5.在Windows访问Linux下的3344端口成功

作业练习2

docker装tomcat

#1.--rm:即用完就删除容器,一般用来测试
docker run -it --rm tomcat:9.0

16-Apr-2022 08:12:32.494 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.56]
16-Apr-2022 08:12:32.541 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]

#2.-d:在后台启动tomcat,设置宿主机端口为3355可以访问到容器内部的8080端口
[root@localhost ~]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
nginx                 latest    605c77e624dd   3 months ago    141MB
tomcat                9.0       b8e65a4d736d   3 months ago    680MB
centos                latest    5d0da3dc9764   7 months ago    231MB
portainer/portainer   latest    580c0e4e98b0   13 months ago   79.1MB
[root@localhost ~]# docker run -d -p 3355:8080 --name tomcat01 b8e65a4d736d  
e8786426d5745264ff7be1cabd08a86b361a36b6db0db2324290e070812cce11
#3.在Windows访问失败

#4.进入tomcat,发现没有webapps,阿里云镜像的原因,默认最小的镜像,保证最小可运行的环境
[root@localhost ~]# docker exec -it tomcat01 /bin/bash

#5.进入tomcat后,ls,发现所有包括root文件在webapps.disk下,进入webapps,将webapps.disk的所有文件拷贝进来
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@e8786426d574:/usr/local/tomcat# cd webapps.dist/
root@e8786426d574:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager
root@e8786426d574:/usr/local/tomcat/webapps.dist# cd .
root@e8786426d574:/usr/local/tomcat/webapps.dist# cd ..
root@e8786426d574:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@e8786426d574:/usr/local/tomcat# cd webapps
root@e8786426d574:/usr/local/tomcat/webapps# ls
ROOT  docs  examples  host-manager  manager

#6.再次刷新,成功

可视化
#1.安装命令
docker volume create portainer_data
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

#2.访问9000IP即可进入可视化界面

 
docker镜像 

如何得到:

  1. 远程仓库下载
  2. 朋友拷贝
  3. 自己制作镜像

联合文件系统:一层一层的叠加

特点:docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层是常说的容器层,容器之下的叫镜像层。

commit镜像
docker commit -m”提交的描述信息“ -a”作者“ 容器id 目标镜像名:TAG

#启动一个默认的镜像,修改基本文件后可以使用,将操作过的容器通过提交作为一个镜像,即为自己修改的一个镜像
[root@localhost ~]# docker commit -a="qiyou" -m="add webapps app" 68afe35929b0 tomcattest:1.0
sha256:32bf4ab7ae0356f7034fef021d5815c5749e64ce264bf3b9bdab7c9e84ef615e
Docker数据卷

容器的持久化与同步操作

使用数据卷

方法一:使用命令挂载

#docker run -it -v 主机目录:容器目录[-p 主机端口:容器端口]

[root@localhost home]# docker run -it -v /home/test:/home centos /bin/

docker run -d --name nginx01 -v juming-nginx:/etc/nginx:ro nginx   #只读【只能通过宿主机操作,容器内部无法操作】
docker run -d --name nginx01 -v juming-nginx:/etc/nginx:rw nginx   #只写

DockerFile

DockerFile就是用来构建docker镜像的构建文件,通过这个脚本可以生成镜像

方式二:

#编写dockerfile脚本文件
[root@localhost docker-test-volume]# cat dockerfile1 
FROM centos

VOLUM ["volume01","volume02"]

CMD echo"====end===="
CMD  /bin/bash
[root@localhost docker-test-volume]# 

#建造镜像
#-f:地址
#-t生成镜像版本
[root@localhost docker-test-volume]# docker build -f /home/docker-test-volume/dockerfile1 -t qiyou/centos:1.0 .
=====================生成============================
【Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM centos
---> 5d0da3dc9764
Step 2/4 : VOLUME ["volume01","volume02"]
---> Running in 129715cec359
Removing intermediate container 129715cec359
---> d2a57d2ea3ad
Step 3/4 : CMD echo"====end===="
---> Running in b72bda796c77
Removing intermediate container b72bda796c77
---> d0688f81fdfb
Step 4/4 : CMD  /bin/bash
---> Running in 7bd097b55579
Removing intermediate container 7bd097b55579
---> 0a24198843ae
Successfully built 0a24198843ae
Successfully tagged qiyou/centos:1.0】

#dockerfile1
【FROM centos

VOLUME ["volume01","volume02"]

CMD echo"====end===="
CMD  /bin/bash】

挂载目录文件

挂载成功

docker01中创建的文件,继承docker01的docker02中也会出现,同步到了docker02。

--volumes-from:实现容器间数据共享
#测试:删除docker01,查看docker02是否还可以访问这个文件。发现可以访问(是一个双向拷贝的概念)。


容器哦之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器实用为止。

DockerFile构建过程 基础知识
  1. 每个保留关键字都必须大写。

  2. 执行从上到下顺序执行。

  3. 每个指令都会创建提交一个新的镜像层,并提交。

  4. Dockerfile是面向开发的,做镜像,就要编写dockerfile文件。

  5. DockerFile:构建文件,定义了一切的步骤、源代码。

  6. DockerImages:构建生成的镜像,最终发布和运行的产品。

  7. Docker容器:镜像运行起来提供服务的。【房子】

DockerFile的指令
FROM                         #基础镜像,一切从这里开始构建
MAINTAINER                   #镜像是谁写的:姓名+邮箱
RUN                          #镜像构建的时候需要运行的命令
ADD                          #步骤:tomcat镜像,这个tomcat压缩包就是添加内容
WORKDIR                      #镜像的工作目录  【/bin/bash】
VOLUME                       #挂载的目录
EXPOSE                       #暴露端口位置
RUN
CMD                          #指定这个容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT                   #指定这个容器启动的时候需要运行的命令,可以追加命令
ONBUILD                      #触发指令,当构建一个被继承DockerFile,这个时候会运行ONBUILD指令
COPY                         #类似ADD,将文件拷贝到镜像中
ENV                          #构建的时候设置环境变量

实战测试

构建一个自己的centos镜像

#1.编写dockerfile文件
[root@localhost dockerfile]# vim mydockerfile-centos
[root@localhost dockerfile]# cat mydockerfile-centos 
FROM centos
MAINTAINER qiyou<3103068330@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end---"
CMD /bin/bash

#2.通过文件构建镜像
[root@localhost dockerfile]# docker build -f mydockerfile-centos -t mycentos:0.1 .
#下载失败
Sending build context to Docker daemon  2.048kB
Step 1/10 : FROM centos
 ---> 5d0da3dc9764
Step 2/10 : MAINTAINER qiyou<3103068330@qq.com>
 ---> Running in 301b44fe4dc3
Removing intermediate container 301b44fe4dc3
 ---> 00affbe94fab
Step 3/10 : ENV MYPATH /usr/local
 ---> Running in 05ca2748117b
Removing intermediate container 05ca2748117b
 ---> 30cde38032ed
Step 4/10 : WORKDIR $MYPATH
 ---> Running in 37feeec33789
Removing intermediate container 37feeec33789
 ---> cae5a404e74d
Step 5/10 : RUN yum -y install vim
 ---> Running in 6fb1d3d1f673
CentOS Linux 8 - AppStream                       58  B/s |  38  B     00:00    
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
The command '/bin/sh -c yum -y install vim' returned a non-zero code: 1

#失败原因,源centos是8的原因,centos下线
#解决办法:将FROM centos 改为:FROM centos:centos7即可构建成功
Complete!
Removing intermediate container acc0fd88364a
 ---> 245790b3f11f
Step 7/10 : EXPOSE 80
 ---> Running in f54bdff07ec9
Removing intermediate container f54bdff07ec9
 ---> e310dd8b0f02
Step 8/10 : CMD echo $MYPATH
 ---> Running in 591812cae8ac
Removing intermediate container 591812cae8ac
 ---> b63f76dc371f
Step 9/10 : CMD echo "----end---"
 ---> Running in 145c709ae41d
Removing intermediate container 145c709ae41d
 ---> c0614e76e99d
Step 10/10 : CMD /bin/bash
 ---> Running in c38d15285fb9
Removing intermediate container c38d15285fb9
 ---> 7e29af4b6d8c
Successfully built 7e29af4b6d8c
Successfully tagged mycentos:0.1

#3.测试运行成功
[root@localhost dockerfile]# docker run -it mycentos:0.1
[root@e9679c3ffc6d local]# pwd
/usr/local                                         #工作目录
[root@e9679c3ffc6d local]# ifconfig                #可以使用
eth0: flags=4163  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

#docker history 镜像id:查看官方镜像制作过程

删除镜像出错,先docker -ps -a ,查看镜像的容器,先删除容器:docker rm 容器id,在删除镜像:docker rmi 镜像id。

发布自己的镜像到Dockerhub
  1. 地址:Docker Hub Container Image Library | App Containerization注册自己的账号

  2. 在服务器上提交镜像

    [root@localhost ~]# docker login --help
    
    Usage:  docker login [OPTIONS] [SERVER]
    
    Log in to a Docker registry.
    If no server is specified, the default is defined by the daemon.
    
    Options:
      -p, --password string   Password
          --password-stdin    Take the password from stdin
      -u, --username string   Username
      
      #登录成功
      [root@localhost ~]# docker login -u qiyou1314
    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
    
  3. 提交镜像

    [root@localhost ~]# docker push mycentos:0.1
    The push refers to repository [docker.io/library/mycentos]
    af339cb9a105: Preparing 
    e85909dd3e2a: Preparing 
    174f56854903: Preparing 
    
    #提交失败:denied: requested access to the resource is denied     拒绝
    
    #失败原因:推送前需要tag命令修改为规范的镜像
    
    #修改,增加tag
    root@localhost ~]# docker tag 7e29af4b6d8c qiyou1314/mycentos:1.0
    [root@localhost ~]# docker images
    REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
    mycentos              0.1       7e29af4b6d8c   37 minutes ago   591MB
    qiyou1314/mycentos    1.0       7e29af4b6d8c   37 minutes ago   591MB
    qiyou/centos          1.0       0a24198843ae   2 hours ago      231MB
    nginx                 latest    605c77e624dd   3 months ago     141MB
    tomcat                9.0       b8e65a4d736d   3 months ago     680MB
    centos                centos7   eeb6ee3f44bd   7 months ago     204MB
    centos                latest    5d0da3dc9764   7 months ago     231MB
    portainer/portainer   latest    580c0e4e98b0   13 months ago    79.1MB
    
    #重新push成功     提交也是按镜像的层级来提交的
    [root@localhost ~]# docker push qiyou1314/mycentos:1.0
    The push refers to repository [docker.io/qiyou1314/mycentos]
    af339cb9a105: Pushing [=>                                                 ]  4.977MB/166.1MB
    e85909dd3e2a: Pushing [========>                                          ]  38.09MB/221.1MB
    174f56854903: Pushing [================>                                  ]  66.64MB/203.9MB
    

    在Dockerhub上查看发布成功!

Docker小结
#下载为压缩包发送给别人

docker save  -X
docker load -X

深入学习待学Docker网络

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/828589.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号