Linux部署docker(最详细docker,一看就会)

Docker概述:

Docker为什么会出现?

一款产品:开发...测试..上线,三套环境!

例如:发布一个项目(jar+redis mysql jdk等),项目能不能带上环境安装一起打包

传统:java -- apk(应用)-- 发布(应用商店)--张三使用apk -- 下载安装即可使用

现在:java -- jar(环境)-- 打包项目带上环境(镜像)-- (docker仓库:商店) --下载我们发布的镜像 -- 直接运行即可!

Docker的核心思想:隔离

Docker的历史:

2010年,几个搞it的年轻人,就在美国成立了一家公司叫dotCloud

做一些pass的云计算服务,LXC有关的容器服务!

他们将自己的技术(容器化技术)命名为docker!

Docker刚刚诞生的时候,没有引起行业的注意!dotCloud,就活不下去了!

想到了“开源”

开放源代码!

2013年,docker开源!

Docker越来越多的人发现了docker的优点!火了,docker每个月都会有新的版本诞生!

2014年4月9日,docker1.0发布!

Docker至今短短10年为什么这么火?

十分轻巧

在容器技术出来之前,我们都是使用虚拟机(非常占内存及本地资源),vm、kvm等!

Linux部署docker(最详细docker,一看就会)_第1张图片

Docker如何安装:

Docker的基本组成:Linux部署docker(最详细docker,一看就会)_第2张图片

镜像(image):就好比是个一个模板,可以通过这个模板来启动容器创建容器服务,tomcat镜像 --- run --- tomcat服务,可以经过这个镜像可以启动无数个(最终服务运行或项目运行就是在这个容器中的)

容器(container):docker利用容器技术,独立运行一个或一组应用,通过镜像来创建的;容器的基本命令,启动、停止、删除!目前就可以把这个容器理解为就是一个简易的Linux系统。

仓库(repository):仓库就是存放镜像的地方,仓库分为公有仓库和私有仓库。公有仓库有docker Hub(默认是国外的)、阿里云、腾讯云...都有容器服务器(我们需要配置镜像加速)

安装docker:

环境准备:系统centos7

帮助文档:

  1. 卸载旧的 版本

yum remove docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine

  1. 安装依赖关系:

yum install -y yum-utils

  1. 设置镜像仓库:

yum-config-manager \

    --add-repo \

https://download.docker.com/linux/centos/docker-ce.repo(国外的,很慢)

yum-config-manager \

    --add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(推荐使用阿里云的)

  1. 更新yum软件包索引

yum makecache fast

  1. 安装docker

yum -y install docker-ce docker-ce-cli containerd.io

注:docker-ce 社区、docker-ee 企业版

  1. 启动docker

systemctl start docker

  1. 使用docker version查看是否启动成功

Linux部署docker(最详细docker,一看就会)_第3张图片

8、测试hello-world

docker run hello-world

Linux部署docker(最详细docker,一看就会)_第4张图片

9查看一下hello-world镜像在不在?

docker images

10如何卸载docker

yum remove docker-ce docker-ce-cli containerd.io

rm -rf /var/lib/docker #docker默认的工作路径

rm -rf /var/lib/containerd

阿里云加速:

1、登录阿里云平台找到“产品与服务”里的“容器镜像服务”

 Linux部署docker(最详细docker,一看就会)_第5张图片

2. 点击“镜像工具”-“镜像加速器”Linux部署docker(最详细docker,一看就会)_第6张图片

回顾hello-world创建流程

Linux部署docker(最详细docker,一看就会)_第7张图片

Linux部署docker(最详细docker,一看就会)_第8张图片

docker底层原理:

Docker是怎么工作的?

Docker是一个client-server结构的系统,docker的守护进程运行在主机上,通过socket从客户端访问!

Docker-server接受到docker-client的指令就会执行这个命令!

Linux部署docker(最详细docker,一看就会)_第9张图片

Docker为什么比vm虚拟机快?

Docker利用的是宿主机的内核,vm需要Guest OS

Linux部署docker(最详细docker,一看就会)_第10张图片

所以说新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免一些引导性的操作。

Docker常用命令:

帮助命令:

Docker version #显示docker的版本信息

Docker info #显示docker的系统信息,docker的镜像和容器信息

Docker 命令 --help #万能命令

 Linux部署docker(最详细docker,一看就会)_第11张图片

镜像命令:

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

[root@localhost containerd]# docker images

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE

hello-world   latest    d1165f221234   3 months ago   13.3kB

#解释:

REPOSITORY  #镜像的仓库源

TAG  #镜像的标签

IMAGE ID  #镜像的ID

CREATED  #镜像的创建时间

SIZE  #镜像的大小

#可选项

[root@localhost containerd]# docker images --help

Usage:  docker images [OPTIONS] [REPOSITORY[:TAG]]

List images

Options:

  -a, --all       #显示所有镜像

  -q, --quiet     #只显示镜像的ID

Docker search 镜像名称  #搜索镜像

[root@localhost containerd]# docker search mysql

NAME                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

mysql                             MySQL is a widely used, open-source relation…   11082     [OK]       

mariadb                           MariaDB Server is a high performing open sou…   4199      [OK]       

#可选项,通过搜索来过滤

--filter=STARS=4000 #就是搜索出来的镜像STARS大于4000的。

Docker pull 镜像名称[:tag]  #下载镜像

最新版本下载:

[root@localhost containerd]# docker pull mysql

Using default tag: latest  #不跟版本,下载默认最新的版本

latest: Pulling from library/mysql

b4d181a07f80: Pull complete  #分层下载,image的核心,联合文件系统

a462b60610f5: Pull complete

578fafb77ab8: Pull complete

524046006037: Pull complete

d0cbe54c8855: Pull complete

aa18e05cc46d: Pull complete

32ca814c833f: Pull complete

9ecc8abdb7f5: Pull complete

ad042b682e0f: Pull complete

71d327c6bb78: Pull complete

165d1d10a3fa: Pull complete

2f40c47d0626: Pull complete

Digest: sha256:52b8406e4c32b8cf0557f1b74517e14c5393aff5cf0384eff62d9e81f4985d4b #签名信息,防伪标识

Status: Downloaded newer image for mysql:latest

docker.io/library/mysql:latest  #真实地址

指定版本下载:

[root@localhost containerd]# docker pull mysql:5.7

5.7: Pulling from library/mysql

b4d181a07f80: Already exists

a462b60610f5: Already exists

578fafb77ab8: Already exists

524046006037: Already exists

d0cbe54c8855: Already exists

aa18e05cc46d: Already exists

32ca814c833f: Already exists

52645b4af634: Pull complete

bca6a5b14385: Pull complete

309f36297c75: Pull complete

7d75cacde0f8: Pull complete

Digest: sha256:1a2f9cd257e75cc80e9118b303d1648366bc2049101449bf2c8d82b022ea86b7

Status: Downloaded newer image for mysql:5.7

docker.io/library/mysql:5.7

Docker rmi 删除镜像

docker rmi -f 09361feeb475  #根据镜像ID,删除单个镜像

docker rmi -f $(docker images -aq)  #删除全部镜像

容器命令:

说明:我们有了镜像才可以创建容器,下载一个centos镜像来测试学习!

docker pull centos

创建容器并启动

docker run [可选参数] image

参数说明:

--name=“name” #容器的名字 tomcat01 tomcat02 用来区分容器

-d #后台方式运行

-it #使用交互方式运行,进入容器查看内容

/bin/bash #给一个控制台

-p #指定容器的端口 -p8080:8080

-p ip:主机端口:容器端口

    -p主机端口:容器端口 (常用)

    -p容器端口

-P  #随机映射一个 49000~49900 的端口到内部容器开放的网络端口

-v 宿主机目录和容器内目录映射

测试 启动并进入容器:

[root@localhost containerd]# docker run -it centos /bin/bash

[root@c2e9f2af5df6 /]# ls  #查看容器内的centos ,基础版本,很多命令是不完善的

bin  etc   lib   lost+found  mnt  proc  run   srv  tmp  var

dev  home  lib64  media       opt  root  sbin  sys  usr

[root@c2e9f2af5df6 /]# exit   #退出命令

exit

[root@localhost /]# ls

bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

列出容器:

dokcer ps #查看正在运行中的容器列表

-a #查看所有容器

-n=? #显示最近创建的容器

-q #只显示容器的ID

[root@localhost /]# docker ps

CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

[root@localhost /]# docker ps -a

CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES

c2e9f2af5df6   centos         "/bin/bash"   7 minutes ago   Exited (0) 4 minutes ago             infallible_wu

04e4b20d023d   d1165f221234   "/hello"      2 hours ago     Exited (0) 2 hours ago               flamboyant_hellman

退出容器

Exit #退出后容器停止

Ctrl+p+q #退出容器不停止

删除容器

docker rm 容器id  #删除指定容器,不能删除正在运行中的容器

docker rm -f $(docker ps -aq)  #删除所有的容器

docker ps -a -q | xargs docker rm  #删除所有的容器

启动和停止容器的操作

docker start 容器id  #启动容器

docker stop容器id   #停止当前运行容器

docker restart 容器id  #重启容器

docker kill 容器id   #强制停止当前容器

常用其他命令:

查看日志:

docker logs -f -t --tail 10 容器

-tf  #显示日志

--tail number  #要显示日志条数

[root@MiWiFi-R4A-srv ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS         PORTS     NAMES

c2e9f2af5df6   centos    "/bin/bash"   10 hours ago   Up 6 seconds             infallible_wu

[root@MiWiFi-R4A-srv ~]# docker logs -f -t --tail 10 c2e9f2af5df6

2021-07-03T16:58:57.371780294Z [root@c2e9f2af5df6 /]# ls

2021-07-03T16:58:57.378009686Z bin  etc   lib   lost+found  mnt  proc  run   srv  tmp  var

2021-07-03T16:58:57.378060051Z dev  home  lib64  media       opt  root  sbin  sys  usr

2021-07-03T17:00:45.937116561Z [root@c2e9f2af5df6 /]# exit  

2021-07-03T17:00:45.937156697Z exit

查看容器进程信息

[root@MiWiFi-R4A-srv ~]# docker top c2e9f2af5df6

UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD

root                9559                9538                0                   11:00               pts/0               00:00:00            /bin/bash

[root@MiWiFi-R4A-srv ~]# docker inspect --help

Usage:  docker inspect [OPTIONS] NAME|ID [NAME|ID...]

Return low-level information on Docker objects

Options:

  -f, --format string   Format the output using the given Go template

  -s, --size            Display total file sizes if the type is container

      --type string     Return JSON for specified type

[root@MiWiFi-R4A-srv ~]# docker inspect c2e9f2af5df6

进入当前正在运行的容器

#我们通常容器都是使用后台方式运行,退出容器后需要再次进入容器修改一些配置

#命令

方式一:docker exec -it 容器id bashshell  #进入容器后开启一个新的终端,可以在里面操作(常用)

[root@MiWiFi-R4A-srv ~]# docker ps

CONTAINER ID   IMAGE     COMMAND       CREATED        STATUS          PORTS     NAMES

c2e9f2af5df6   centos    "/bin/bash"   10 hours ago   Up 14 minutes             infallible_wu

[root@MiWiFi-R4A-srv ~]# docker exec -it c2e9f2af5df6 /bin/bash

[root@c2e9f2af5df6 /]# ls

bin  etc   lib   lost+found  mnt  proc  run   srv  tmp  var

dev  home  lib64  media       opt  root  sbin  sys  usr

方式二:

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

[root@MiWiFi-R4A-srv ~]# docker attach c2e9f2af5df6

[root@c2e9f2af5df6 /]# ls

bin  etc   lib   lost+found  mnt  proc  run   srv  tmp  var

dev  home  lib64  media       opt  root  sbin  sys  usr

[root@c2e9f2af5df6 /]#

从容器内拷贝文件到主机上

docker cp c2e9f2af5df6:容器文件路径 本地路径

#进入docker容器内部

[root@MiWiFi-R4A-srv ~]# docker attach c2e9f2af5df6

[root@c2e9f2af5df6 /]# ls

bin  etc   lib   lost+found  mnt  proc  run   srv  tianda.txt  usr

dev  home  lib64  media       opt  root  sbin  sys  tmp var

[root@c2e9f2af5df6 /]# pwd

/

#cp容器内部文件到本地

[root@MiWiFi-R4A-srv ~]# docker cp c2e9f2af5df6:/tianda.txt ./

[root@MiWiFi-R4A-srv ~]# ls

??               initial-setup-ks.cfg  tianda.txt  模板  图片  下载  桌面

anaconda-ks.cfg  localho

注:cp是一个手动过程,后边我们使用-v选项,以卷的技术实现自动

从主机复制到容器:

docker cp host_path containerID:container_path

#docker cp 本地文件 容器id:容器路径

小结:Linux部署docker(最详细docker,一看就会)_第12张图片

Linux部署docker(最详细docker,一看就会)_第13张图片

1. 如何搜索镜像和获取镜像?

    dockersearch 关键字和 docker pull 镜像名

2、创建一个保持运行的容器命令?

    docker run -t -i centos /bin/bash

3、容器的启动、停止及重启命令?

    docker start 、restart 、stop 容器id

4、怎么查看正在运行的容器和所有容器?

    docker ps && docker ps -a

5、怎么退出容器:两种方法分别?

    exit:bash终止,容器进入停止状态

    ctrl+p && Ctrl+q:退出容器,但容器保持运行状态

6、查看容器运行信息(占用的cpu、内存、网络等)

    docker stats 容器id

7、怎么查看在容器里做过的操作记录?

    docker diff 容器id

8、怎么连接到运行的容器?

    docker attach 容器id

    docker exec -ti 容器id /bin/bash

9、查看容器或镜像的内部信息?

    docker inspect 容器id或镜像id

10、如何删除容器?

    docker rm 容器id (前提需要关闭运行的容器),不关闭加-f强行移除

11、如何查看所有镜像?

     docker images

12、如何删除镜像?

     在没有容器使用此镜像的前提下使用:

     docker rmi 镜像id

13、从容器内拷贝文件到主机上

docker cp c2e9f2af5df6:容器文件路径 本地路径

作业练习

作业一:

Docker安装nginx

1、搜索镜像 search 镜像名称 #建议大家去docker搜索,可以看帮助文档

2、拉去镜像 pull 镜像名称

3、docker images 查看镜像

4、docker run -d --name nginx01 -p 3344:80 nginx

5、运行测试 :elinks http://ip:3344 --dump

6、进入容器查看配置文件

docker exec -it nginx01 /bin/bash

whereis nginx

cd /etc/nginx

ls

端口暴露的概念:

Linux部署docker(最详细docker,一看就会)_第14张图片

思考问题:我们每次改动nginx配置文件,都需要进入容器内部?十分的麻烦,我要是可以在外部提供一个映射路径,达到在容器外修改文件名,容器内部就可以自动修改?(使用-v数据卷技术实现)

作业二:

使用docker安装一个tomcat!

#官方的使用

Docker run -it --rm tomcat:9.0

#我们之前的启动都是后台启动,停止了容器之后,容器还是可以查到的,Docker run -it --rm 一般是用来测试的,用完即删。

#下载启动

docker pull tomcat

#启动tomcat

docker run -d -p 3355:8080 --name tomcat01 tomcat

安装好tomcat后,默认没有webapps,阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除了,保证最小的可用的环境。

将/usr/local/tomcat/下webapps.dist目录里的文件cp到webapps下即可。

思考问题:我们以后要部署项目,如果每次都要进入容器是不是十分麻烦?咱们要是可以在容器外部提供一个映射路径,webapps,我们在外部放置项目,就自动同步到内部就好了!

 docker的总结就到这里!如果可以的话给个赞吧!

你可能感兴趣的:(docker,容器,java)