学习目标:
docker容器和镜像的区别(持续更新)
学习内容:
1、docker容器基本概念与运用
2、docker镜像基本概念与运用
3、docker容器和镜像同点
4、docker容器和镜像异点
5、docker在LeaderNews中运行的命令与命令解释
6、docker学习相关链接网址
7、docker在LeaderNews中运行的命令与命令解释的学习相关链接网址
8、docker官方参考资料学习与官方网址
1、docker容器基本概念与运用
1.1 Container(容器,一层读写层+多层只读层)
容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。要点:容器 = 镜像 + 读写层,并且容器的定义并没有提及是否要运行容器。
1.2 Running Container(运行态容器,一层读写层+多层只读层+隔离的进程空间和包含其中的进程)
运行状态的容器「Running Container」是由一个可读写的文件系统「静态容器」+ 隔离的进程空间和其中的进程构成的。下面这张图片展示了一个运行中的容器。
正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进行修改、删除、创建,这些改变都将作用于可读写层(read-write layer)。下面这张图展示了这个行为。
1.3 运用
我们可以通过运行以下命令来验证我们上面所说的:
docker run ubuntu touch happiness.txt
即便是这个ubuntu容器不再运行,我们依旧能够在主机的文件系统上找到这个新文件。
find / -name happiness.txt
/var/lib/docker/aufs/diff/860a7b...889/happiness.txt
2、docker镜像基本概念与运用
2.1 Image Layer(镜像层)
镜像可以看成是由多个镜像层叠加起来的一个文件系统(通过UnionFS与AUFS文件联合系统实现),镜像层也可以简单理解为一个基本的镜像,而每个镜像层之间通过指针的形式进行叠加。
2.2 Image(镜像,只读层的集合)
镜像是一堆只读层的统一视角,除了最底层没有指向外,每一层都指向它的父层。统一文件系统( Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在。在用户的角度看来,只存在一个文件系统。镜像每一层都是不可写的,都是只读层。
2.3 /var/lib/docker/aufs目录
需要注意的是,在一个运行中的容器内部,这些层是不可见的。在我的主机上,我发现它们存在于/var/lib/docker/aufs目录下。
sudo tree -L 1 /var/lib/docker/
/var/lib/docker/
├── aufs
├── containers
├── graph
├── init
├── linkgraph.db
├── repositories-aufs
├── tmp
├── trust
└── volumes
7 directories, 2 files
3、docker容器和镜像同点
3.1 镜像(Image)
Docker统一文件系统(the union file system)
镜像(Image)就是一堆只读层(read-only layer)的统一视角。
3.2 容器(container)
容器(container)的定义和镜像(image)几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
容器 = 镜像 + 可读层。
一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。
4、docker容器和镜像异点
简而言之,容器 = 镜像 + 读写层。
5、docker在LeaderNews中运行的命令与命令解释
5.1 Docker的安装(Linux)
5.1.1 Docker要求CentOS系统的内核版本高于3.10
查看CentOS内核版本的命令
uname -r
如果内核版本低于3.10,升级软件包及内核
yum update
5.1.2 安装Docker
1、安装docker
yum install docker
2、输入y确认安装
3、启动docker
systemctl start docker
4、查看docker的版本号确认是否启动成功
docker -v
5、将docker设置成开机启动
systemctl enable docker
6、停止docker
systemctl stop docker
7、实例操作
[root@chongba-docker ~]# docker -v
Docker version 19.03.13, build 4484c46d9d
[root@chongba-docker ~]# systemctl stop docker
[root@chongba-docker ~]# docker -v
Docker version 19.03.13, build 4484c46d9d
[root@chongba-docker ~]# docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@chongba-docker ~]# systemctl start docker
5.2 Docker的常用操作
5.2.1 镜像操作
软件镜像—>操作(也就是对软件应用APP进行操作)
操作 | 命令 | 说明 |
检索 | docker search 关键字 eg:docker search mysql | 在docker hub上检索镜像的详细信息 docker hub链接:https://hub.docker.com/ |
拉取 | docker pull 镜像名:tag | tag是可选的,tag表示标签,多为软件按的版本,默认是latest最新 |
列表 | docker images | 查看所有的本地镜像列表 |
删除 | docker rmi image-id | 删除指定的本地镜像,image-id是在本地镜像的唯一标识,可用docker images查看/ |
5.2.2 容器操作
软件镜像—>运行镜像—>产生一个容器(也就是在运行的软件)
操作 | 命令 | 说明 |
运行 | docker run --name container-name -d image-name eg:docker run --name myredis -d redis:latest (最后的参数有标签最好加上标签,要是latest可以不加) | –name:自定义容器名 -d:后台运行 image-name:指定镜像模板 (–nam可以省略不用起别名启动也可以,此时系统回自动加上一个别名) |
列表 | docker ps (查看运行中的容器) | 加上 -a 可以查看所有的容器 |
停止 | docker stop container-name/container-id | 停止当前运行的容器 |
启动 | docker start container-name/container-id | 启动容器 |
删除 | docker rm container-id | 删除指定容器 |
端口映射 | -p 6379:6379 eg:docker run -d -p 6379:6379 --name myredis docker.io/redis | -p:主机端口(映射到)容器内部的端口 |
容器日志 | docker logs container-name/container-id | 查看日志 |
点击查看更多命令 5.3 实例安装tomcat
步骤:(下面以tomcat为例)
1、操作镜像
docker search tomcat
2、下载镜像(不加 :tag 默认下载的是latest最新版本的)
docker pull tomcat
3、根据镜像启动容器
docker run --name mytomcat -d tomcat:latest
4、查看运行中的容器
docker ps
5、停止运行中的容器(container-id/container-name)
docker stop mytomcat
6、查看所有的容器,包括没启动的和启动的
docker ps -a
7、启动容器(container-name/container-id)
docker start mytomcat
8、删除容器(前提是容器必须是停止状态,记得用docker ps 查看container-id)
docker rm container-id
9、启动一个做了端口映射的tomcat
docker run -d -p 8888:8080 tomcat
-d:后台运行
-p:将主机端口映射到容器的端口 主机端口:内部端口
(进行到这里就可以在主机上面用8888端口来访问tomcat主页,但是有很大一部分原因是关闭了Linux的防火墙)
10、可以查看linux的防火墙状态
service firewalld status
service firewalld stop 关闭防火墙
11、查看容器的日志
docker logs container-id/container-name
12、一个镜像可以启动多个容器,下面两个端口主机端都能访问,并且每个容器都是独立的互不干扰的
docker run -d -p 8887:8080 tomcat
docker run -d -p 8889:8080 tomcat
13、这里在添加一个创建myslq5.5的例子
docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.5
(这个例子是创建一个带有映射端口的,mysql5.5版本的容器,并且指定了在进行数据库链接的时候需要输入的密码,上面的顺序不能错哦。)