docker精通之路(上)

run的运行流程图

在这里插入图片描述

docker是怎么工作的

在这里插入图片描述
Docker是一个client-server结构的系统,Docker的守护进程运行在主机上,通过socket从客户端访问,server收到client的命令就会执行

Docker为什么比虚拟机快

在这里插入图片描述

  1. Docker有着比虚拟机更少的抽象层。由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源。
  2. Docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。

docker常用命令

docker version

docker info

docker 命令 --help

docker images #查看所有本地主机上的镜像
在这里插入图片描述
REPOSITORY:镜像的仓库源
TAG:镜像的标签
image id 镜像的id
size 镜像的大小

在这里插入图片描述
sudo docker images
-q只显示镜像的id
-a列出所有镜像

在这里插入图片描述

docker search 搜索镜像

sudo docker search mysql
在这里插入图片描述
通过filter过滤

sudo docker search mysql --filter=stars=9000 搜索版本号大于9000的

sudo docker pull mysql

默认下载最新版本的mysql,分层下载,有签名和真实地址

sudo docker pull mysql:5.7 指定版本下载(需要在官网上看版本号是否存在)
在这里插入图片描述
分块存,更新时候只用更新部分文件即可。

sudo docker rmi -f 6c20ffa54f86

删除指定image
在这里插入图片描述

容器命令

sudo docker pull centos
创建一个centos镜像

docker run 可选参数 image

可选参数
– name =‘名字’
-d 后台方式运行
-it 交互方式运行
-p 主机端口:容器端口

zhou@zhou-virtual-machine:~$ sudo docker run -it centos
[root@2556946e064d /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@2556946e064d /]# exit
exit
zhou@zhou-virtual-machine:~$

列出所有运行的容器
docker ps

-a 加上历史运行过的容器
-n = ? 显示最近创建的容器
-q 只显示容器运行的编号

退出容器
exit
容器不停止并退出
ctrl + p + q
在这里插入图片描述

sudo docker start/stop/restart/kill +容器id

在这里插入图片描述

后台常用命令

sudo docker run -d centos
再用docker ps查看运行中的容器,发现centos停止了
原因: docker容器使用后台运行,必须要有一个前台进程,docker如果发现没有前台应用,就会自动停止

查看日志

sudo docker run -d centos /bin/sh -c “while true;do echo zhoudage;sleep 1;done;”

sudo docker logs -tf --tail 10 da55ebfc18ec(容器id)

linux的tail会默认显示文件的最后10行,并且不断刷新
–tail 数字 显示几行

zhou@zhou-virtual-machine:~/Documents$ tail -c 4 test.md
12

显示文件最后4个字符

-n 数字 代表最后几行
-f 循环读取

查看容器中的进程信息ps

sudo docker top da55ebfc18ec(容器id)

zhou@zhou-virtual-machine:~/Documents$ sudo docker top da55ebfc18ec
UID PID PPID C STIME TTY TIME CMD
root 97980 97952 0 15:44 ? 00:00:00 /bin/sh -c while true;do echo zhoudage;sleep 1;done;
root 99636 97980 0 16:03 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

查看镜像的元数据

zhou@zhou-virtual-machine:~/Documents$ sudo docker inspect centos
[
    {
        "Id": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
        "RepoTags": [
            "centos:latest"
        ],
        "RepoDigests": [
            "centos@sha256:5528e8b1b1719d34604c87e11dcd1c0a20bedf46e83b5632cdeac91b8c04efc1"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2020-12-08T00:22:53.076477777Z",
        "Container": "395e0bfa7301f73bc994efe15099ea56b8836c608dd32614ac5ae279976d33e4",
        "ContainerConfig": {
            "Hostname": "395e0bfa7301",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/sh",
                "-c",
                "#(nop) ",
                "CMD [\"/bin/bash\"]"
            ],
            "Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "DockerVersion": "19.03.12",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:6de05bdfbf9a9d403458d10de9e088b6d93d971dd5d48d18b4b6758f4554f451",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20201204",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 209348104,
        "VirtualSize": 209348104,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/snap/docker/common/var-lib-docker/overlay2/d4ad4eabd568c9e2162cdef7af295ae66854f24492cdebe73703487642099c4d/merged",
                "UpperDir": "/var/snap/docker/common/var-lib-docker/overlay2/d4ad4eabd568c9e2162cdef7af295ae66854f24492cdebe73703487642099c4d/diff",
                "WorkDir": "/var/snap/docker/common/var-lib-docker/overlay2/d4ad4eabd568c9e2162cdef7af295ae66854f24492cdebe73703487642099c4d/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:2653d992f4ef2bfd27f94db643815aa567240c37732cae1405ad1c1309ee9859"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        }
    }
]

进入当前正在运行的容器命令

方式一 sudo docker attach 容器id
进入容器正在执行的终端,不会启动新的进程

方式二 sudo docker exec -it da55ebfc18ec bash
进入容器后开启一个新的终端(可以在里面操作 常用)

将容器里面的文件拷贝出来到主机上

sudo docker cp da55ebfc18ec(容器id):文件路径 主机路径

部署 nginx镜像实战

安装Nginx
sudo docker pull nginx

开启Nginx后台运行
sudo docker run -d -it --name nginx01 -p 3344:80 nginx

-p 主机端口号:容器端口号 --name 指定名字

curl localhost:3344
在这里插入图片描述

进入Nginx容器
sudo docker exec -it 8090d13f1dc5 bash
在这里插入图片描述

部署tomcat

sudo docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
Digest: sha256:1af502b6fd35c1d4ab6f24dc9bd36b58678a068ff1206c25acc129fb90b2a76a
Status: Image is up to date for tomcat:latest
docker.io/library/tomcat:latest

在这里插入图片描述

开启后台运行tomcat :
sudo docker run -d -name tomcat01(名字) -p 3344:8080 tomcat

但是此时访问http://localhost:3344/ 会报404错误,因为此tomcat版本为阿里云精简版,能省的功能都省了
sudo docker exec -it tomcat01 bash 进入tomcat01容器

在这里插入图片描述
webapps文件夹为空
root@9ec0d9350f38:/usr/local/tomcat/webapps.dist# cp -r ./* …/webapps/

在这里插入图片描述
docker镜像
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

commit镜像

把自己修改过的镜像发布,或者已经安装好、配置好的镜像环境拷贝到其它主机上时
在这里插入图片描述
sudo docker commit -a=“zhoudage” -m=“webapps add web” 9ec0d9350f38 tomcat_web:2.0

-a= “作者名字”
-m = “描述信息”
9ec0d9350f38(容器id) tomcat_web:2.0(新名字:版本号)
在这里插入图片描述
保存当前容器的状态,就像vm的快照一样,方便迁移

数据卷技术(文件挂载)

sudo docker run -it -v /home/zhou/Documents/testCentos:/home/ centos bash
-v 主机目录:centos容器目录

需要使用绝对路径,否则会报错
在这里插入图片描述

在这里插入图片描述
使用sudo docker inspect centos 可以查看具体挂载的地方
在这里插入图片描述

docker 理念:将应用和环境打包成一个镜像
当是把docker中的容器删除了,容器所产生的数据也就没了
需要将docker容器中产生的数据同步到本地,这就用到了数据卷技术

配置mysql实战

sudo docker run -d -it -p 10000:3306 -v /home/zhou/Documents/mysql/conf:/etc/mysql/conf.d -v /home/zhou/Documents/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=zhoudage --name mysql01 mysql

-e MYSQL_ROOT_PASSWORD= 使用mysql前先设置密码

在这里插入图片描述

进入 mysql
sudo docker exec -it 15bd405a524c bash

mysql -u root -p
创建数据库
creat database zhouTest;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值