- 更新yum后,添加yum仓库
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 yum3.下载最新的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 yum5. 导入证书
rpm --import http://mirror.centos.org/centos/RPM-GPG-KEY-CentOS-76.添加阿里的源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo7.清除缓存 生成新的缓存
yum clean all yum makecache
-
失败后发现没有yum目录,原来下载出错,下载以下三个镜像
-
重新运行:yum makecache即可成功;再次更新yum:yum update。
-
[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.javadocker常用命令
作业练习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:3344Welcome 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镜像
如何得到:
- 远程仓库下载
- 朋友拷贝
- 自己制作镜像
联合文件系统:一层一层的叠加
commit镜像特点:docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部,这一层是常说的容器层,容器之下的叫镜像层。
docker commit -m”提交的描述信息“ -a”作者“ 容器id 目标镜像名:TAG #启动一个默认的镜像,修改基本文件后可以使用,将操作过的容器通过提交作为一个镜像,即为自己修改的一个镜像 [root@localhost ~]# docker commit -a="qiyou" -m="add webapps app" 68afe35929b0 tomcattest:1.0 sha256:32bf4ab7ae0356f7034fef021d5815c5749e64ce264bf3b9bdab7c9e84ef615eDocker数据卷
使用数据卷容器的持久化与同步操作
方法一:使用命令挂载
#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构建过程 基础知识容器哦之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器实用为止。
-
每个保留关键字都必须大写。
-
执行从上到下顺序执行。
-
每个指令都会创建提交一个新的镜像层,并提交。
-
Dockerfile是面向开发的,做镜像,就要编写dockerfile文件。
-
DockerFile:构建文件,定义了一切的步骤、源代码。
-
DockerImages:构建生成的镜像,最终发布和运行的产品。
-
Docker容器:镜像运行起来提供服务的。【房子】
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=4163mtu 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:查看官方镜像制作过程
发布自己的镜像到Dockerhub删除镜像出错,先docker -ps -a ,查看镜像的容器,先删除容器:docker rm 容器id,在删除镜像:docker rmi 镜像id。
-
地址:Docker Hub Container Image Library | App Containerization注册自己的账号
-
在服务器上提交镜像
[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 -
提交镜像
[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 save -X docker load -X
深入学习待学Docker网络



