容器docker入门学习

容器

轻量级的虚拟机,更加节省资源(cpu、内存、磁盘、带宽等)的虚拟机。

优点:省钱、成本低、速度更加快,扩展性更加强。serverless。

容器的软件厂商

① docker:提供容器技术的软件;

② k8s:kubernetes是容器集群管理软件,可以管理很多台服务器上的docker启动的容器。可以实现容器的分布式管理,综合很多容器的软件。k8s也是一个软件,用来管理多台服务器上的docker容器的。容器集群编排工具。

docker

docker是一个轻量级、可移植的虚拟化技术,通过容器化技术实现应用程序的打包、运输和运行。

==docker==

==container集装箱==一个封闭的空间,里面可以运行我们的程序。

==1、集装箱container==

集装箱:存放货物的地方

有隔离作用:靠Linux内核来实现的。一个进程对应一个容器。

==2、what a container==

a standard unit of software。

1、docker的框架:一个真实的机器里面装一个linux系统,系统里面装docker,docker里面再装容器,每个容器里面装一个服务。

==3、docker和容器的区别==

docker都是用来管理容器的一个软件。

docker引擎

Docker引擎是一种开源容器化技术,用于构建和容器化应用程序。Docker引擎充当客户端-服务器应用程序,具有:

① 具有长时间运行的守护进程dockerd的服务器。

② 指定程序可用于与Docker守护程序通信和指示docker守护程序的接口的API。

③ 命令行界面(CLI)客户端泊坞窗。

CLI使用Docker API通过脚本或直接CLI命令来控制Docker守护程序或与Docker守护程序交互。许多其他Docker应用程序使用底层API和CLI。守护程序创建和管理Docker对象,例如镜像、容器、网络和卷。

虚拟化

虚拟化virtualization:模拟出来的,不是物理的,算真的。

容器技术:container,存放东西的地方。容纳别的东西的器皿。

docker,containerd,k8s等。

虚拟化技术

VMware:workstation :入门级的产品

docker:容器技术的经典代表。

CNF 云原生基金会:Google Redhat ibm等:K8S(kubernetes):containerd(容器运行时软件)

docker是容器运行时软件----容器软件

k8s是管理容器运行时的软件(docker、containerd、rki等)---k8s理解为管理docker集群的软件。

k8s是建立再docker上的。

docker和k8s都是使用go语言开发的

只要是与k8s相关的技术都叫云原生相关的技术,容器理解为一个虚拟机,虚拟机是不是运行软件?

docker安装详解

安装具体流程可以参考之前的文章,这里做个大概的安装流程介绍:

docker安装详细教程

1、安装检查

卸载原来安装过的docker,如果没有安装的就不用进行卸载

代码语言:bash复制
sudo yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine

2、安装yum相关的工具

下载docker-ce.repo文件

代码语言:bash复制
yum install -y yum-utils

yum-config-manager \

    --add-repo \

    .repo

下载docker-ce.repo文件做个文件存在/etc/yum.repo.d

3、安装docker-ce软件

==container engine==:容器引擎

docker是一个容器管理的软件

==docker-ce==:是服务器端软件 server

==docker-ce-cli==:是客户端软件 client

docker-compose-plugin

代码语言:bash复制
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

4、查看docker版本

==docker --version==

代码语言:bash复制
[root@sc-master shell]# docker --version

Docker version 20.10.17, build 100c701

5、启动docker服务

==systemctl start docker==

代码语言:bash复制
systemctl start docker

6、设置docker开机启动

==systemctl enable docker==

代码语言:bash复制
systemctl enable docker

1个docker 启动的每一个容器的背后就是一个linux进程

7、查看有哪些docker容器运行进程

==docker ps==

代码语言:bash复制
[root@sc-master shell]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS  

8、查看容器里有哪些镜像

==docker images== --images 镜像,镜像里面包含了我们需要的软件的代码和基础环境。

代码语言:bash复制
[root@sc-master shell]# docker images

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE

hello-world   latest    feb5d9fea6a5   11 months ago   13.3kB

9、下载nginx软件

==docker pull nginx==

代码语言:bash复制
[root@sc-master shell]# docker images 查看nginx镜像软件

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE

nginx         latest    2b7d6430f78d   2 days ago      142MB

hello-world   latest    feb5d9fea6a5   11 months ago   13.3kB

10、启动一个docker容器的命令

==docker run==

启动一个容器,可以理解为开启一台虚拟机,相当于将nginx放入容器中进行运行,这样就可以限制其他的cpu资源。

11、启动一个为sc-nginx的容器

==docker run -d -p 8090:80 --name sc-nginx nginx==

代码语言:bash复制
[root@sc-master shell]# docker run -d -p 8090:80 --name sc-nginx nginx

1d3e0fdfaf8f971523ce5b539dda1c6c8c609c8e88c29361ed77e2f778e376e0

注解:

-d:在后台运行demo 、daemon守护进程

-p 8090:80 指定端口映射 DNAT:访问本机的8090端口,转发到docker容器的80端口。

--name sc-nginx 指定容器的名字为:sc-nginx

nginx是镜像的名字

12、查看防火墙的设置

==iptables -t nat -L==

代码语言:bash复制
[root@sc-master shell]# iptables -t nat -L

Chain PREROUTING (policy ACCEPT)

target     prot opt source               destination         

DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL

DNAT       tcp  --  anywhere             anywhere             tcp dpt:8090 to:172.17.0.2:80

查看容器启动的进程:

代码语言:bash复制
[root@sc-master shell]# docker ps

CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                                   NAMES

1d3e0fdfaf8f   nginx     "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   0.0.0.0:8090->80/tcp, :::8090->80/tcp   sc-nginx

13、防火墙nat详解

图片理解:使用了nat功能,用户要去访问:

docker0:是宿主机与其他容器之间进行通信的网关,也就是lan口。

14、nginx访问测试

然后去客户机上能否访问,访问宿主机的8090端口,去浏览器上输入:==http://宿主机ip地址:8090/==

我的是:http://192.168.2.152:8090/

如果因为镜像没有访问到的话,可以先关闭防火墙和重启docker服务进行解决,如果重启docker服务的话,可能会导致之前的镜像停止,所以先查看所有的容器,包括停止的,然后再启动已经停止的容器。

1、关闭防火墙:

代码语言:bash复制
service firewalld stop

2、重启docker服务

代码语言:bash复制
service docker restart 

3、查看所有的容器,包括已经停止的

代码语言:bash复制
docker ps -a

4、启动已经停止的容器

代码语言:bash复制
docker start sc-nginx

5、再查看是否已经启动成功

代码语言:bash复制
docker ps