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
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>

#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<UP,BROADCAST,RUNNING,MULTICAST>  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<UP,LOOPBACK,RUNNING>  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. 在这里插入图片描述

  3. 在服务器上提交镜像

    [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
    
  4. 提交镜像

    [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网络

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Linux安装MySQL Docker镜像,你可以执行以下步骤: 1. 首先,确保你已经安装Docker。你可以使用以下命令检查是否已安装Docker: ``` docker -v ``` 2. 根据你的需求,选择合适的MySQL镜像版本。你可以从Docker Hub上搜索并选择一个适合你的版本。 3. 使用以下命令拉取MySQL镜像: ``` docker pull mysql:<版本号> ``` 注意替换`<版本号>`为你选择的MySQL版本号。比如,如果你选择的是MySQL 5.7版本,你可以使用以下命令: ``` docker pull mysql:5.7 ``` 4. 拉取完成后,你可以使用以下命令运行MySQL容器: ``` docker run -d -p <宿主机端口>:<容器端口> -e MYSQL_ROOT_PASSWORD=<密码> -e MYSQL_DATABASE=<数据库名> mysql:<版本号> ``` 注意替换`<宿主机端口>`、`<容器端口>`、`<密码>`、`<数据库名>`和`<版本号>`为你的实际配置。例如,如果你想将宿主机的端口3307映射到容器的端口3306,并设置root用户的密码为123456,数据库名为docker001,你可以使用以下命令: ``` docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=docker001 mysql:5.7 ``` 这将创建一个MySQL容器并运行它。 希望这能帮到你!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Linux安装docker并创建mysql容器](https://blog.csdn.net/dyslhl/article/details/127419191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [alpine-mysql:Docker镜像MySQL(Alpine)](https://download.csdn.net/download/weixin_42118056/18756862)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值