安装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。
-
[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镜像
如何得到:
- 远程仓库下载
- 朋友拷贝
- 自己制作镜像
联合文件系统:一层一层的叠加
特点: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构建过程
基础知识
-
每个保留关键字都必须大写。
-
执行从上到下顺序执行。
-
每个指令都会创建提交一个新的镜像层,并提交。
-
Dockerfile是面向开发的,做镜像,就要编写dockerfile文件。
-
DockerFile:构建文件,定义了一切的步骤、源代码。
-
DockerImages:构建生成的镜像,最终发布和运行的产品。
-
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
-
地址: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小结
#下载为压缩包发送给别人
docker save -X
docker load -X
深入学习待学Docker网络