当前位置:   article > 正文

Docker入门学习详细记录(一)_docker pull hello-world using default tag: latest

docker pull hello-world using default tag: latest latest: pulling from libra

一、Dockerd概述

Docker为什么出现?

一款产品有开发、上线前后两套或者更多环境,每个机器都要部署环境(集群redis、ES、Hadoop…!),配置环境麻烦易出错,且不能跨平台。

二、Docker安装

1、卸载旧的版本

 yum remove docker \
              docker-client \
              docker-client-latest \
              docker-common \
              docker-latest \
              docker-latest-logrotate \
              docker-logrotate \
              docker-engine
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

2、需要的安装包

yum install -y yum-utils
  • 1

3、设置镜像的仓库

默认为国外版本

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
  • 1
  • 2
  • 3

推荐使用阿里云,较快速

yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 1
  • 2
  • 3

4、更新yum软件包索引

yum makecache fast
  • 1

5、安装docker(最新版本)

yum install docker-ce docker-ce-cli containerd.io
  • 1

6、启动docker

systemctl start docker
  • 1

7、查看是否启动成功

docker version
  • 1

在这里插入图片描述

8、测试

docker run hello-world	
  • 1

在这里插入图片描述
*unable to find image ‘hello-world:latest’ locally ------ 没有找到镜像
Pulling from library/hello-world ------ 下载镜像
Hello from docker ------ 安装成功

9、查看镜像的下载

docker images
  • 1

在这里插入图片描述
了解:卸载docker
卸载依赖:yum remove docker-ce docker-ce-cli containerd.io
删除资源:rm -rf /var/lib/docker

10、配置阿里云镜像加速

登录阿里云->工作台->容器镜像服务
在这里插入图片描述
配置使用

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://wdm6xkay.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

11、Run的流程

在这里插入图片描述

12、Docker原理

Docker是什么工作的
Docker是一个client-server结构的系统,Docker的守护进程运行在主机上,通过socker客户端访问!
DockerServer接收到 Docker-Client 的指令,就会执行这个命令!
在这里插入图片描述
Docker为什么比VM快
1、Docker有着比虚拟机更少的抽象层
2、docker利用的是宿主机的内核,VM用的是Guest Os在这里插入图片描述
新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载Guest Os,而docker是利用宿主机的操作系统,省略了这个复杂的过程。

三、Docker的常用命令

帮助命令

docker version   ----- 显示docker的版本信息
docker info    -----  显示docker的系统信息,包括镜像与容器的数量
docker 命令 --help    -----  万能命令
  • 1
  • 2
  • 3

帮助文档地址:https://docs.docker.com/engine/reference/commandline/cli/

1、镜像命令

docker images ---- 查看所有本地主机上的镜像

	[root@qingzhi ~]# docker images
	REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
 	hello-world   latest    d1165f221234   5 months ago   13.3kB
  • 1
  • 2
  • 3

解释

REPOSITORY     镜像的仓库源
TAG                     镜像的标签
IMAGE ID            镜像的ID
CREATED           镜像的创建时间
SIZE                    镜像的大小
  • 1
  • 2
  • 3
  • 4
  • 5

可选项

-a, --all             列出所有镜像
-q, --quiet        只显示镜像的ID
  • 1
  • 2

docker search ---- 搜索镜像

[root@qingzhi ~]# docker search mysql
NAME            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql           MySQL is a widely used, open-source relation…   11258     [OK]       
mariadb         MariaDB Server is a high performing open sou…   4277      [OK] 
  • 1
  • 2
  • 3
  • 4

可选项 --filter 通过收藏来过滤镜像

--filter=STARS=3000    搜索出来就是镜像STARS大于3000的
  • 1

在这里插入图片描述

docker pull ---- 下载镜像

下载镜像 docker pull 【镜像名】 【:tag】

[root@qingzhi ~]# docker pull mysql
Using default tag: latest                   如果不写tag。默认就是latest(最新版本)
latest: Pulling from library/mysql
33847f680f63: Pull complete                 分层下载,docker image的核心
5cb67864e624: Pull complete 
1a2b594783f5: Pull complete 
b30e406dd925: Pull complete 
48901e306e4c: Pull complete 
603d2b7147fd: Pull complete 
802aa684c1c4: Pull complete 
715d3c143a06: Pull complete 
6978e1b7a511: Pull complete 
f0d78b0ac1be: Pull complete 
35a94d251ed1: Pull complete 
36f75719b1a9: Pull complete 
Digest: sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd    签名
Status: Downloaded newer image for mysql:latest       
docker.io/library/mysql:latest          真实地址
[root@qingzhi ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

docker pull mysql 等价于 docker pull docker.io/library/mysql:latest

指定版本

[root@qingzhi ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
33847f680f63: Already exists        exists代表该部分已经下载过,不需要重新下载
5cb67864e624: Already exists 
1a2b594783f5: Already exists 
b30e406dd925: Already exists 
48901e306e4c: Already exists 
603d2b7147fd: Already exists 
802aa684c1c4: Already exists 
5b5a19178915: Pull complete 
f9ce7411c6e4: Pull complete 
f51f6977d9b2: Pull complete 
aeb6b16ce012: Pull complete 
Digest: sha256:be70d18aedc37927293e7947c8de41ae6490ecd4c79df1db40d1b5b5af7d9596
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@qingzhi ~]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述

docker rmi 删除镜像

docker rmi -f 镜像id ------- 删除指定镜像
docker rmi -f 镜像id 镜像id 镜像id ------ 删除多个镜像
docker rmi -f $(docker images -aq) ----- 删除全部镜像

2、容器命令

说明:有了镜像才能创建容器,Linux ,测试下载CentOs镜像

docker pull CentOs
  • 1

新建容器并启动

docker run [可选参数] image
--name="name"   容器名字 tomcat01,tomcat02 用来区分容器
-d              后台方式运行
-it             使用交互方式运行,进入容器查看内容
-p              指定容器的端口 -p 8080:8080
----     -p ip:主机端口:容器端口
----     -p 主机端口:容器端口 (常用)
----     -p 容器端口
----     容器端口
-P              随机指定端口
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

测试,新建容器启动并进入

在这里插入图片描述
启动进入之后,主机名称发生改变

退出容器

在这里插入图片描述

列出所有运行的容器

docker ps        --  列出所有正在运行的容器
docker ps  -a    --  列出所有正在运行的容器+历史运行的容器
docker ps  -q    --  列出容器

[root@qingzhi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@qingzhi ~]# docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                          PORTS     NAMES
2898ae33003d   centos         "/bin/bash"   3 minutes ago   Exited (0) About a minute ago             crazy_fermat
8952dd8ecf0d   d1165f221234   "/hello"      5 hours ago     Exited (0) 5 hours ago                    mystifying_keller

[root@qingzhi ~]# docker ps -aq
2898ae33003d
8952dd8ecf0d
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

退出容器

exit —直接停止容器并退出
ctrl + P +Q —容器不停止退出(键盘大写锁定下)

在这里插入图片描述

删除容器

docker rm 容器id     -- 删除指定的容器,不能删除正在运行的,如果强制删除 rm -f
docker rm -f  $(docker ps -aq)   --- 删除所有容器
  • 1
  • 2

启动和停止容器

docker start 容器id     -- 启动一个已经停止的容器
docker restart 容器id   -- 重启容器 
docker stop 容器id      -- 停止当前正在运行的容器
docker kill 容器id      -- 强制停止当前容器
  • 1
  • 2
  • 3
  • 4

后台启动容器

root@qingzhi ~]# docker run -d centos 
7d3c5f418eacd54d054bd8bf864e39967d2e9f6d25b02784246007b9afaacdea
[root@qingzhi ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@qingzhi ~]# 

后台启动成功后,docker ps发现centos停止了?
--docker容器使用后台运行,就必须有一个前台进程,dcoker如果没有发现应用,就会自动停止。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

3、操作命令

查看日志

docker logs
  • 1

在这里插入图片描述
有运行中的容器,没有日志。可编写一段shell脚本以便观察。

[root@qingzhi ~]# docker run -d centos /bin/sh -c "while true;do echo qingzhi;sleep 1;done"
  • 1

在这里插入图片描述

查看容器中的进程信息

docker top 容器id
[root@qingzhi ~]# docker top 7ea3a50f6d53
UID                 PID                 PPID                C                   STIME               TTY      
root                9319                9285                0                   16:45               ?                 
root                9375                9319                0                   16:46               ?               
  • 1
  • 2
  • 3
  • 4
  • 5

查看元数据

docker inspect 容器id
[root@qingzhi ~]# docker inspect 7ea3a50f6d53
[
  {
    "Id": "7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331",
    "Created": "2021-08-13T08:42:13.862127123Z",
    "Path": "/bin/sh",
    "Args": [
        "-c",
        "while true;do echo qingzhi;sleep 1;done"
    ],
    "State": {
        "Status": "running",
        "Running": true,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "Dead": false,
        "Pid": 9319,
        "ExitCode": 0,
        "Error": "",
        "StartedAt": "2021-08-13T08:45:59.983325505Z",
        "FinishedAt": "2021-08-13T08:43:44.249393264Z"
    },
    "Image": "sha256:300e315adb2f96afe5f0b2780b87f28ae95231fe3bdd1e16b9ba606307728f55",
    "ResolvConfPath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/resolv.conf",
    "HostnamePath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/hostname",
    "HostsPath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/hosts",
    "LogPath": "/var/lib/docker/containers/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331/7ea3a50f6d53ca8c57407e05cda8f8110213a13b4c9f64073753d19c2466c331-json.log",
    ……
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

进入当前正在运行的容器

docker exec -it 容器id /bin/bash    --- 方式一
  • 1

在这里插入图片描述

docker attach 容器id   ---方式二
  • 1

区别:方式一进入容器后开启一个新的终端,可以在里面操作(常用)
方式二进入容器正在执行的终端,不会启动新的进程

从容器拷贝文件到主机上

docker cp 容器id:容器内路径 目的主机路径
  • 1

在这里插入图片描述
当前主机 /home 目录下中只有一个文件,进入容器内,创建文件之后退出

在这里插入图片描述
退出后虽容器停止运行,只要容器还在就不影响文件的拷贝。

可视化

portainer – docker图形化管理工具,提供一个后台操作面板

docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock --privileged=true portainer/portainer
  • 1

在这里插入图片描述

四、Docker练习

1、 安装nginx

dokcer search nginx  ---  搜索nginx
docker pull nginx   ---  下载nginx
docker images   --- 查看下载是否完成
  • 1
  • 2
  • 3

在这里插入图片描述
启动并查看运行

-d  后台运行 
--name  给容器命名
-p  宿主机端口,容器内端口
docker run -d --name nginx01 -p 8888:80 nginx
docker ps
curl localhost:8888
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述

-p   --- 端口暴露概念
  • 1

在这里插入图片描述

docker exec -it nginx01 /bin/bash  -- 进入容器查看配置文件位置
  • 1

在这里插入图片描述
退出 -> 停止

2、安装Elsaticsearch

docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:tag
  • 1

es暴露端口较多,十分消耗内存,数据一般需要放置在安全目录。

docker stats  --- 查看cpu状态
  • 1

在这里插入图片描述
测试es是否成功开启
在这里插入图片描述
启动时增加配置 -e ES_JAVA_OPTS="-Xms128m -Xms512" 限制es最大占用内存

docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms128m -Xms512" elasticsearch:7.6.2
  • 1

五、Docker镜像

镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容、包括代码、运行时-库、环境变量与配置文件。

Docker镜像加载原理

UnionFS(联合文件系统)
Unios文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础。镜像可以通过分层来继承、基于基础镜像,可以制作各种具体的应用镜像。
特性:一次同时加载多个系统文件,但从外面来看,只能看到一个文件系统,联合加载会把个各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件与目录。
Docker镜像加载原理
Docker镜像实际是由一层一层的文件系统组成,层级的文件系统UnionFS。
bootfs(boot file system)主要包含bootloader和kernel、bootloader主要是引导加载kernel,linux刚启动时回家再bootfs文件系统,再Docker镜像的最底层是bootfs,这一层与典型的linux/unix系统是一样的,包含voot加载器和内核。档boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,系统也会卸载bootfs。
rootsfs(root file system)在bootfs之上。包含的就是典型Linux系统中的 /dev,/proc/etc等标准目录和文件,rootfs就是各种不同的操作系统发行版,如Ubuntu,Centos等。
在这里插入图片描述
对于一个精简的os,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。

分层理解

分层的镜像
下载镜像,观察下载日志输出:
在这里插入图片描述
Already exits 代表其他镜像中该层已经下载过,无需下载。

docker image inspect redis:latest   --  查看镜像信息
  • 1

在这里插入图片描述

commit镜像

docker commit -a="作者" -m="提交的描述信息" 容器id 目标镜像名:[tag]
  • 1
  1. 启动一个tomecat、
  2. 发现这个默认的tomcat没有webapps应用,
  3. 将webapps.dist中的应用拷贝到webapps中
  4. 将操作之后的容器通过commit 提交作为一个新的镜像。
    在这里插入图片描述
    如果想要保存当前容器的状态,就可以通过commit提交。

注:部分插图来自网络,如有侵权请联系删除

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号