看完这一篇,你还不会Doker吗

看完这一篇,你还不会Doker吗

目录思维导图:
在这里插入图片描述

前言

docker大家不要觉得很难,不好学,就拿当初我们一个老师说数据库,那个东西呀,不就是个软件,一学就会,当然了docker也不过就是一个软件,安装在Linux上然后使用,那当然了,学习docker我们需要有Linux基础,如果你还不会Linux,一篇带你入门Linux,这里:https://blog.csdn.net/hello_list/article/details/123977208,因为都是博主本人写的,前后都是有联系的哦,废话不多说,开始docker之旅;

官网:https://www.docker.com/

image-20220404223737876

简单大家英语,看是否知道这两句话什么意思,百度翻译一下看是否正确!

Developers Love Docker. Businesses Trust It.

Build safer, share wider, run faster: New updates to our product subscriptions.

官网教程:https://www.docker.com/,接下来我们跟着官网一起学习

介绍

来自白度百科:

image-20220404224237620

我们拆开来理解:docker是一个虚拟化技术,也就相当于我们用的VMware,没有钱购买云服务器,只能通过在本地安装一个软件,然后配置一套Linux环境,而docker就相当于,Linux这样一款软件,什么是沙箱呢,就是安全机制,好几多个虚拟机,但是之间的数据并不会互相传递;

下载安装

博主没有钱,博主用vm,博主自己装虚拟机,那就是vm虚拟机centos7安装docker;

安装过程需要root权限,直接却换到root用户进行了,所以sudo都省去了

1.查看当前的内核版本

uname -r

img

我这里是3.10 ,满足条件。

2、使用 root 权限更新 yum 包(生产环境中此步操作需慎重,看自己情况,学习的话随便搞)

yum -y update

这个命令不是必须执行的,看个人情况,后面出现不兼容的情况的话就必须update了

注意 
yum -y update:升级所有包同时也升级软件和系统内核; 
yum -y upgrade:只升级所有包,不升级软件和系统内

3、看下自己的虚拟机上是否有docker,我这里没有,如果有的话,卸载了

[root@localhost ~]# docker version
bash: docker: 未找到命令...
[root@localhost ~]# 


#卸载旧版本(如果之前安装过的话)
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

4.安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

image-20220413103012403

5、设置 yum 源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

image-20220413103114438

docker有两种版本,一种是企业版ee需要付费使用,另一种是社区版ce,免费使用,博主选择免费版

6、安装docker-ce

yum install -y docker-ce

image-20220413104440466

7、验证是否安装成功

docker version

image-20220413104506535

安装完成之后我们看到这里有报错,是因为我们的docker服务还没有启动,启动docker服务:

systemctl start docker
systemctl enable docker.service   #设置开机自动启动docker服务

我们再看,就好了:

image-20220413104938338

Hello World

万事开头hello world,我们可以拉取hello world镜像

docker run hello-world

image-20220413105742029

ok,安装并且测试成功!

快速上手

查看镜像

先前我们安装了一个hello world镜像,那怎么查看呢:docker images查看拉取的镜像;

[root@localhost /]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB
[root@localhost /]# 

/var/lib/docker为docker的工作目录

卸载镜像

docker rmi -f [镜像id] [镜像名称] 、docker rmi -f $(docker images -aq):全部删除,shell语法

#删除hello world
[root@localhost lib]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

[root@localhost lib]# docker rmi -f feb5d9fea6a5
Untagged: hello-world:latest
Untagged: hello-world@sha256:bfea6278a0a267fad2634554f4f0c6f31981eea41c553fdf5a83e95a41d40c38
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412

[root@localhost lib]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@localhost lib]# 

快速上手安装一个tomcat

1、拉取镜像

这里的镜像呢,大家就可以认为是软件包嘛,下载软件你才能使用

docker pull tomcat:9.0 #安装9.0版本

image-20220413113149723

2、运行tomcat容器

docker run -it -d -p 1234:8080 --name tomcat01 tomcat:9.0

我们通过电脑去访问Linux上的tomcat,虚拟机内网地址是:192.168.244.151,在浏览器中访问192.168.244.151:1234

image-20220413181757210

成功访问,但是有小伙伴有疑问了,这是成功访问吗,是404,但是你没有看到这已经是tomcat启动才报出的404页面吗,哈哈,这是因为,这些镜像并不是完整的,是经过压缩的,所有该省的都省去了,到这里就算是访问此时成功了,那我们还是要使用以下tomcat容器的;

3、自制页面

进入容器:docker exec -it 容器id /bin/bash,这是进入容器,那我们怎么退出容器呢,两次Ctrl+q+p就可以全身而退,容器也还在运行;

如果我们通过拉取一个文件到这里我们发现,不成功因为它是压缩版,好多命令都省去了,我们可以这样;

root@6cf6c699fb65:/usr/local/tomcat/webapps# cd hello
root@6cf6c699fb65:/usr/local/tomcat/webapps/hello# echo '<html><body>我是docker的tomcat01<body></html>'  >> index.html

这时候我们再访问http://192.168.244.151:1234/hello/,ok访问成功,这时候有乱码问题,先不管了,后面再处理吧;

image-20220415113329444

当然了,这时候有小伙伴说,天天拿着不是hello就是world,整个页面吧,就这些,这次那我们就不这样了,这里我给小伙伴从网上找了一个好看的网页模板;一个文件夹,那我们把这个简单的网页发布到tomcat容器上,这时候不能直接拖进去;

image-20220415113526536

这里呢可以实现的方法很多:

1、将容器停止进行卷挂载,这里后面细说

2、将文件移动到虚拟机,再通过虚拟机移动到容器

3、//尝试了,不行,大家有想法可以去试试最后就是,不是缺少命令嘛,我们直接添加上这个命令,哪个最简单现在,第三个,我们试下

我们选择第2个:

命令:docker cp 本地路径 容器长ID:容器路径

xftp下载安装

之前我们安装过xshell,但是只能一拽文件到虚拟机传输,目录则不行,这里我们使用需要下载一个xftp工具,这样可以很好的进行文件传输,还是破解版,很简单;

地址:https://www.jb51.net/softs/732920.html#downintro2

大家不要点错下载地方,点这里,然后根据图文教程即可完成安装:

image-20220415175559077

点击这里我们就可以实现文件的传输:

image-20220415175716591

把文件移动到docket容器中:

[root@localhost dockerwork]# ls
xuexiriji
[root@localhost dockerwork]# docker cp /home/dockerwork/* 6cf6c699fb65:/usr/local/tomcat/webapp

传输成功,测试访问成功:

image-20220415180828449

网页模板留给你们,不要再说博主每次不是hello就是world,咱们功能到位就行,好看的页面那不多了:

链接:https://pan.baidu.com/s/1gjQAc9_JeIozcn2e7AP39A?pwd=rirg 
提取码:rirg

Docker Hub仓库

目前 Docker 官方维护了一个公共仓库 Docker Hub

大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。

这里的仓库,就相当于我们的依赖,所有的镜像都在仓库中,我们所使用的镜像子在本地不存在,就回去仓库拉取;

image-20220415203548936

我们可以搜一下centos镜像,看下都有什么:

image-20220415203926993

当然我们不只是在官网可以搜索,在Linux虚拟机上同样也可以搜索:

命令:docket search 镜像名

image-20220415205115904

是不是和官网上差不多呢,我们还可以直接拉取镜像,pull,当然还可以推送自己的镜像;

#拉取镜像
$ docker pull ubuntu 

#推送镜像,username替换成Docker 账号用户名。

$ docker tag ubuntu:18.04 username/ubuntu:18.04
$ docker image ls

REPOSITORY      TAG        IMAGE ID            CREATED           ...  
ubuntu          18.04      275d79972a86        6 days ago        ...  
username/ubuntu 18.04      275d79972a86        6 days ago        ...  
$ docker push username/ubuntu:18.04
$ docker search username/ubuntu

NAME             DESCRIPTION       STARS         OFFICIAL    AUTOMATED
username/ubuntu

镜像

镜像可以这么理解,你手机要安装软件,是不是就是需要一个安装包,就相当于镜像,安装后的软件就相当于容器;

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

下面我们来学习:

  • 1、管理和使用本地 Docker 主机镜像
  • 2、创建镜像

无非是几条命令:

列出自己的镜像

[root@localhost dockerwork]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
tomcat       9.0       402713d372bf   13 days ago   680MB
tomcat       latest    b00440a36b99   13 days ago   680MB

获取镜像

docker pull 镜像名:版本号

查找镜像

docker search 镜像名

拉取镜像

docker pull 镜像名:版本号

推送镜像

docker push 镜像名:版本号

删除镜像

docker rmi 镜像名

设置镜像标签

docker tag 镜像id 标签内容

构建镜像

后面我们细说dockerfile

使用镜像

例如:

这也是创建并进入容器

docker exec -it 容器id /bin/bash   #我们之前就是这样进入镜像的
  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

还记得我在之前说第三种方法,更新镜像命令嘛,但是没有成功,现在你知道了吗?

我们可以更新命令:

先通过 apt-get update更新软件包,然后apt install 命令,比方想使用vim,我们可以,apt install vim就可以,这样我们就可以自己制作自己的centos容器;

容器

查看容器

docker ps #查看当前正在运行的容器
docker ps -a #查看全部容器
#更多命令查看 docker ps --help

运行容器

docker exec -it 容器id /bin/bash   #我们之前就是这样进入镜像的,这是直接创建并进去荣去


docker start 容器id                #我们构建好容器可以这样启动容器
  • -i: 交互式操作。
  • -t: 终端。
  • ubuntu:15.10: 这是指用 ubuntu 15.10 版本镜像为基础来启动容器。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
  • name:指定容器名字。
  • -P :是容器内部端口随机映射到主机的端口。
  • -p : 是容器内部端口绑定到指定的主机端口。
  • v:映射卷挂载。

删除容器

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

停止容器

docker stop    # 停止容器
docker restart # 重启容器

退出容器

exit #关闭并退出容器,容器也就不运行了、
ctrl+q+p #全身而退,容器还在运行

进入容器

#两种方法,区别
docker exec     #我们之前使用过,直接进去容器,进入容器开启一个新的终端
docket attach   #进入容器不会开启新的终端,而是正在运行的终端

连接容器

基础篇不说

拷贝容器

还记得我们在方法2中的时候已经使用了:

命令:docker cp 本地路径 容器长ID:容器路径

反过来,容器内文件也可以到虚拟机;

卷挂载

什么是卷挂载

我们知道容器一旦关闭里面的数据也会丢失,如果我们使用mysql容器,容器关闭,数据没了,那不完蛋了,所以我们得把容器内的数据保存在本地,将数据写在本机卷里,实现数据的持久化,什么是挂在呢,就是让容器与我们得本机使用同一个目录工作,这就是挂载,下面我们实现下就可以理解了,这张图我们也可以用来理解:

image-20220416210245435

1、指定本地卷挂载

我们在启动容器的时候就可以挂载我们的虚拟机的卷,可以使用-v参数启动容器挂载:

dokcer run -it -v 主机内目录:容器内目录 镜像名/id

这里我们在创建一个tomcat,将webapp目录挂载到我们虚拟机的/home/tomcatTest/tomcat02/webapp,发现是不是我们的命令越来越长了:

docker run -d -it -v /home/tomcatTest/tomcat02/webapp:/usr/local/tomcat/webapp --name tomcat02 tomcat:9.0

# 开始 我这里并没有tomcatTest目录
[root@localhost home]# ls
admin  dockerwork  hello  hello.c  hello.sh  test  Testlable.class

# 执行完命令,我们发现我们就有了tomcatTest/tomcat02/webapp
[root@localhost home]# ls
admin  dockerwork  hello  hello.c  hello.sh  test  Testlable.class  tomcatTest
[root@localhost home]# cd tomcatTest/
[root@localhost tomcatTest]# ls
tomcat02
[root@localhost tomcatTest]# cd tomcat02/
[root@localhost tomcat02]# ls
webapp

# 我们看查看下容器内,webapp目录下什么也没有
[root@localhost tomcat02]# docker exec -it f988c8f1fe6d /bin/bash
root@f988c8f1fe6d:/usr/local/tomcat# ls
BUILDING.txt	 NOTICE		RUNNING.txt  lib	     temp     webapps.dist
CONTRIBUTING.md  README.md	bin	     logs	     webapp   work
LICENSE		 RELEASE-NOTES	conf	     native-jni-lib  webapps
root@f988c8f1fe6d:/usr/local/tomcat# cd webapp
root@f988c8f1fe6d:/usr/local/tomcat/webapp# ls
root@f988c8f1fe6d:/usr/local/tomcat/webapp# 

# 我们在容器外添加一个hello/index.html
[root@localhost tomcat02]# cd webapp/
[root@localhost webapp]# ls
[root@localhost webapp]# mkdir hello
[root@localhost webapp]# cd hello
[root@localhost webapp]# vim index.html
[root@localhost webapp]# cat index.html 
hello 我是外部虚拟机创建的文件

# 我们查看容器内,容器内同时也有我们创建的目录和文件,外部访问下
[root@localhost webapp]# docker exec -it f988c8f1fe6d /bin/bash
root@f988c8f1fe6d:/usr/local/tomcat# cd webapp
root@f988c8f1fe6d:/usr/local/tomcat/webapp# ls
hello
root@f988c8f1fe6d:/usr/local/tomcat/webapp# cd hello/
root@f988c8f1fe6d:/usr/local/tomcat/webapp/hello# ls
index.html
root@f988c8f1fe6d:/usr/local/tomcat/webapp/hello# cat index.html 
hello 我是外部虚拟机创建的文件

# 我们同样的道理在容器内添加的一个test目录,回到虚拟机我们同时也可以看到,这时候就实现了卷挂载
root@f988c8f1fe6d:/usr/local/tomcat/webapp/hello# mkdir test
root@f988c8f1fe6d:/usr/local/tomcat/webapp/hello# read escape sequence
[root@localhost webapp]# ls
hello
[root@localhost webapp]# cd hello
[root@localhost hello]# ls
index.html  test

2、匿名挂载

与我们之前的都一样,-v的时候不指定主机挂载目录,我们再创建一个容器:

docker run -d -it -v /usr/local/tomcat/webapp --name tomcat03 tomcat:9.0
[root@localhost hello]# docker run -d -it -v /usr/local/tomcat/webapp --name tomcat03 tomcat:9.0
5d811a8d101807ab3e73e20f66cb5b77e61afe58c2756a704c29ff46ff9dae10
[root@localhost hello]# docker ps
CONTAINER ID   IMAGE        COMMAND             CREATED          STATUS          PORTS      NAMES
5d811a8d1018   tomcat:9.0   "catalina.sh run"   45 seconds ago   Up 43 seconds   8080/tcp   tomcat03
f988c8f1fe6d   tomcat:9.0   "catalina.sh run"   22 minutes ago   Up 22 minutes   8080/tcp   tomcat02

[root@localhost hello]# docker volume ls
DRIVER    VOLUME NAME
local     f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989

这里我们再了解一个命令参数 inspect ,这里我们可以直接查看容器元数据:

[root@localhost hello]# docker inspect tomcat03

# 我们可以查看一大堆该容器的数据,这时候我们看到Mounts挂载这里,可以看到我们容器内/usr/local/tomcat/webapp,已经挂载出去了,并且挂载在本机/var/lib/docker/volumes/f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989/_data
#这里就是我们不指定本机路径的默认挂载路径:/var/lib/docker/volumes/容器id/_data


#挂载id 因为我们没有起名字,随机得id:f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989

"Mounts": [
            {
                "Type": "volume",
                "Name": "f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989",
                "Source": "/var/lib/docker/volumes/f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989/_data",
                "Destination": "/usr/local/tomcat/webapp",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        
        
# 我们查看下 docker的卷
[root@localhost hello]# docker volume ls
DRIVER    VOLUME NAME
local     f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989

#可以看到挂载成功

3、具名挂载

其实就是很简单,起来个名字,我们再创建一个容器:

docker run -d -it -v helloname:/usr/local/tomcat/webapp --name tomcat04 tomcat:9.0`
[root@localhost hello]# docker run -d -it -v helloname:/usr/local/tomcat/webapp --name tomcat04 tomcat:9.0
72a1c417e74a793f37fd4b72fa1be0b81385817ac69da125e9960cf301d16836


# 我们首先查看下容器元数据,我们看到了name已经换成了我起的名字helloname
# "Source": "/var/lib/docker/volumes/helloname/_data"
# "Destination": "/usr/local/tomcat/webapp"
 "Mounts": [
            {
                "Type": "volume",
                "Name": "helloname",
                "Source": "/var/lib/docker/volumes/helloname/_data",
                "Destination": "/usr/local/tomcat/webapp",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],

# 查看下docker的卷
[root@localhost hello]# docker volume ls
[root@localhost hello]# docker volume ls
DRIVER    VOLUME NAME
local     f280b19499b3f9cefcb66e474285af29c0088c06ef7fb771fa7ec47527fdb989
local     helloname

相信到这里你已经理解了

总结

-v 容器内部路径 # 匿名挂载
-v 名称:容器内部路径 #具名挂载
-v /宿主机路径:容器内部路径

扩展:

# docker run -d -it -v helloname:/usr/local/tomcat/webapp:ro --name tomcat04 tomcat:9.0`
# docker run -d -it -v helloname:/usr/local/tomcat/webapp:rw --name tomcat04 tomcat:9.0`
ro 只读   设置为这种,我们在容器内是不可以修改挂载数据的,只能在宿主机挂载路径下进行修改
rw 可读可写(数据挂载默认)

快去尝试下;

Dockerfile

什么是 Dockerfile?

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明,其实就是构建容器的一个脚本文件;

我们学习一下里面的命令即可:

想了想,后面更新,单独一个细讲;

Docker网络

总结

最后没写完,因为感觉这样太多了,不过相信你到这里已经对docker理解很多了,不要想象的太困难,毕竟只是一个相当于软件的东西,希望这个文章对你有帮助;

相信到这里你已经学会用docker了,即使我没有写这一部分,相信你会比我更快地去学会,那看到这里了,点个赞吧,留个关注也行啊!😀

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值