Docker的初步学习

Docker

Docker 的学习

  • Docker概述
  • Docker安装
  • Docker命令
    • 镜像命令
    • 容器命令
    • 操作命令
  • Docker镜像
  • 容器数据卷
  • DockerFile
  • Docker网络原理
  • IDEA整合Docker
  • Docker Compose
  • Docker Swarm
  • CI\CD jenkins

Docker概述

Docker为什么出现

开发 ---- 运维 ,问题:我在我的电脑上可以运行!版本更新,导致服务不可用!对于运维来说,考验就十分大。

环境配置十分麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop、…)费时费力!

发布一个项目(jar+(Redis MySQL jdk …)),可能需要一天 。一旦某个环境配置有误,可能需要从头来过。

那么项目能不能都带上环境安装打包?

Docker给这些问题,提出了解决方案!

Java – apk – 发布到应用商店 – 使用apk – 安装即可使用

Java – jar(环境) – 打包项目带上环境(镜像) – DockerHub(仓库:商店)-- 下载发布的镜像 – 直接运行即可!

在这里插入图片描述

Docker的思想来自于集装箱

多个应用可能会遇到端口冲突

隔离:Docker核心思想,打包装箱,每一个箱子互相隔离。

Docker通过隔离机制,可以将服务器利用到极致。

Docker的历史

Docker 公司起初是一家名为 dotCloud 的平台即服务(Platform-as-a-Service, PaaS)提供商。

2013年,Docker开源!Docker越来越多的人发现了Docker的优点。火了!

2014年,Docker1.0发布!

在容器技术出来之前,我们都是使用虚拟机技术

虚拟机:在Windows装一个Vmware,通过这个软件我们可以虚拟出来一台或多台电脑!不过十分笨重。

Docker容器技术也是一种虚拟化技术。

docker:最核心的环境,几兆就能满足,十分的小巧。秒级启动!

聊聊Docker

Docker是基于Go语言开发的开源项目!

官网:https://www.docker.com/

文档地址:https://docs.docker.com/ Docker的文档是很详细的!
在这里插入图片描述

仓库地址:https://hub.docker.com/

百度百科:

https://baike.baidu.com/item/Docker/13344470?fr=aladdin

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

。。。。。。

Docker能干嘛

在这里插入图片描述

虚拟化技术缺点:

1.资源占用十分多

2.冗余步骤多

3.启动很慢!

容器化技术

容器化技术不是模拟的一个完整的操作系统
在这里插入图片描述

比较Docker和虚拟化技术的不同:

  • 传统虚拟机,虚拟出一套硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
  • 容器内的应用直接运行在宿主机的内核,容器是没有自己的内核,也没有虚拟我们的硬件,所以就轻便了
  • 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响

传统:一堆帮助文档,安装程序

Docker:打包镜像发布测试,一键运行

Docker安装

安装Docker

环境准备

1.需要一点点的Linux基础

2.ContOS 7

3.使用Xshell连接远程服务器

环境查看

[root@izuf65ldvcyvaasah4k2a6z ~]# cat /etc/os-release 
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

安装

Docker安装在centos的文档:https://docs.docker.com/engine/install/centos/

# 1.卸载旧的版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
# 2.需要的安装包
yum install -y yum-utils
# 3.设置镜像的仓库
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
    
# 更新yum软件包索引
[root@izuf65ldvcyvaasah4k2a6z ~]# yum makecache fast

# 4.安装docker相关的内容 docker-ce 社区版
yum install docker-ce docker-ce-cli containerd.io

# 5.启动docker
[root@izuf65ldvcyvaasah4k2a6z ~]# systemctl start docker

# 6.使用docker version
[root@izuf65ldvcyvaasah4k2a6z ~]# docker version
Client: Docker Engine - Community
 Version:           19.03.11
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        42e35e61f3
 Built:             Mon Jun  1 09:13:48 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.11
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       42e35e61f3
  Built:            Mon Jun  1 09:12:26 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683
  
# 7.hello world
[root@izuf65ldvcyvaasah4k2a6z ~]# docker run hello-world

# 8.查看下下载的hello-world镜像
[root@izuf65ldvcyvaasah4k2a6z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              9b188f5fb1e6        5 months ago        98.2MB
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
mysql               5.7                 1e4405fe1ea9        7 months ago        437MB

阿里云镜像加速

1.登录阿里云账户找到容器镜像服务
网址:https://www.aliyun.com/
在这里插入图片描述

2.找到镜像加速地址
在这里插入图片描述

3.配置使用

# 阿里云内部的加速器,每个人都不一样
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://57torq4r.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

在这里插入图片描述

Docker的常用命令

帮助命令

docker version			#显示docker的版本信息
docker info				#显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help	   #帮助命令

帮助文档:https://docs.docker.com/reference/

镜像命令

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

[root@izuf65ldvcyvaasah4k2a6z ~]# clear
[root@izuf65ldvcyvaasah4k2a6z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              9b188f5fb1e6        5 months ago        98.2MB
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
mysql               5.7                 1e4405fe1ea9        7 months ago        437MB
# 解释
REPOSITORY 镜像的仓库源
TAG		   镜像的标签
IMAGE ID   镜像的id
CREATED	   镜像的创建时间
SIZE	   镜像的大小
# 可选项
-a, --all		# 列出所有的镜像
-q, --quiet		#只显示镜像的id
[root@izuf65ldvcyvaasah4k2a6z ~]# docker search --help

Usage:	docker search [OPTIONS] TERM

Search the Docker Hub for images

Options:
  -f, --filter filter   根据提供的条件过滤输出
      --format string   使用Go模板进行漂亮的打印搜索
      --limit int       最大搜索结果数(默认为25)
      --no-trunc        不截断输出
[root@izuf65ldvcyvaasah4k2a6z ~]# docker search mysql --filter=STARS=3000
NAME                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
mysql               MySQL is a widely used, open-source relation…   9650                [OK]                
mariadb             MariaDB is a community-developed fork of MyS…   3510                [OK]

docker pull 下载镜像

# 下载镜像 docker pull 镜像名(:tag)
[root@izuf65ldvcyvaasah4k2a6z ~]# docker pull mysql   如果不写tag,默认下载最新

docker rmi 删除镜像

[root@izuf65ldvcyvaasah4k2a6z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              9b188f5fb1e6        5 months ago        98.2MB
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB
mysql               5.7                 1e4405fe1ea9        7 months ago        437MB
[root@izuf65ldvcyvaasah4k2a6z ~]# docker rmi -f bf756fb1ae65
。。。。。。
[root@izuf65ldvcyvaasah4k2a6z ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              9b188f5fb1e6        5 months ago        98.2MB
mysql               5.7                 1e4405fe1ea9        7 months ago        437MB
[root@izuf65ldvcyvaasah4k2a6z ~]# docker rmi -f $(docker images -aq)  删除全部的镜像

容器镜像

下载一个centos镜像测试

docker pull centos

新建容器并启动

docker run [可选参数] image

# 参数说明
--name="name"		容器名字 ,用来区分容器
-d					后台方式运行
-it					使用交互方式运行,进入容器查看内容
-p					指定容器的端口 -p 8080:8080
	-p ip:主机端口:容器端口
	-p 主机端口:容器端口(常用)
	-p 容器端口
-P					随机指定端口

#测试 启动并进入容器
[root@izuf65ldvcyvaasah4k2a6z ~]# docker run -it centos /bin/bash
[root@663303de85b9 /]#

列出所有运行的容器

docker ps 命令
		#列出当前正在运行的容器
-a		#列出当前正在运行的容器+历史运行过的容器
-n=#显示最近创建的容器

退出容器

exit		# 直接容器停止并退出
Ctrl + p + q # 容器不停止退出

删除容器

docker rm id						#删除一个容器,不能删除正在运行的容器
docker rm -f $(docker ps -aq)		#删除所有容器

启动和停止容器的操作

docker start 容器id		# 启动容器
docker restart 容器id		#重启容器
docker stop 容器id		#停止当前正在运行的容器
docker kill 容器id		#强制停止当前容器

查看容器中的进程信息

[root@izuf65ldvcyvaasah4k2a6z ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7cf1746a6da6        centos              "/bin/bash"         41 seconds ago      Up 40 seconds                           suspicious_pascal
[root@izuf65ldvcyvaasah4k2a6z ~]# docker top 7cf1746a6da6
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                29213               29197               0                   20:52               pts/0               00:00:00            /bin/bash
[root@izuf65ldvcyvaasah4k2a6z ~]#

查看镜像的源数据

[root@izuf65ldvcyvaasah4k2a6z ~]# docker inspect 7cf1746a6da6

**进入当前正在运行的容器 **

# 通常容器都是后台运行,有时需要进入容器,修改一些配置

# 命令
[root@izuf65ldvcyvaasah4k2a6z ~]# docker exec -it 7cf1746a6da6 /bin/bash

# 方式二
[root@izuf65ldvcyvaasah4k2a6z ~]# docker attach 7cf1746a6da6

# docker exec  # 进入容器后开启一个新的终端
# docker attach	# 进入容器正在执行的终端,不会启动新的终端

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

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

[root@izuf65ldvcyvaasah4k2a6z ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7cf1746a6da6        centos              "/bin/bash"         13 minutes ago      Up 13 minutes                           suspicious_pascal
[root@izuf65ldvcyvaasah4k2a6z ~]# docker attach 7cf1746a6da6
[root@7cf1746a6da6 /]# cd /home
[root@7cf1746a6da6 home]# ls
[root@7cf1746a6da6 home]# touch test.java
[root@7cf1746a6da6 home]# exit
exit
[root@izuf65ldvcyvaasah4k2a6z ~]# docker ps
\CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@izuf65ldvcyvaasah4k2a6z ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
7cf1746a6da6        centos              "/bin/bash"         20 minutes ago      Exited (0) 9 seconds ago                       suspicious_pascal
[root@izuf65ldvcyvaasah4k2a6z ~]# docker cp 7cf1746a6da6:/home/test.java /home
[root@izuf65ldvcyvaasah4k2a6z ~]# cd /home
[root@izuf65ldvcyvaasah4k2a6z home]# ls
admin  test.java
[root@izuf65ldvcyvaasah4k2a6z home]# 

练习

Docker安装Nginx

仓库里找对应的版本:https://hub.docker.com/_/nginx

# 1.搜索镜像

[root@izuf65ldvcyvaasah4k2a6z home]# docker search nginx

# 2.下载镜像

[root@izuf65ldvcyvaasah4k2a6z home]# docker pull nginx

# 3.查看是否下载好,运行镜像

[root@izuf65ldvcyvaasah4k2a6z home]# docker images
[root@izuf65ldvcyvaasah4k2a6z home]# docker run -d --name nginx01 -p 8090:80 nginx

# 4.本机测试

curl localhost:8090

# 5.外网测试
http://你自己的公网IP地址:8090/

# 进入容器
[root@izuf65ldvcyvaasah4k2a6z home]# docker exec -it nginx01 /bin/bash
root@1c117a53713a:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@1c117a53713a:/# cd /etc/nginx
root@1c117a53713a:/etc/nginx# ls
conf.d	fastcgi_params	koi-utf  koi-win  mime.types  modules  nginx.conf  scgi_params	uwsgi_params  win-utf
root@1c117a53713a:/etc/nginx#

Docker 安装tomcat

[root@izuf65ldvcyvaasah4k2a6z home]# docker pull tomcat:9.0

[root@izuf65ldvcyvaasah4k2a6z home]# docker run -d --name tomcat01 -p 8081:8080 tomcat:9.0

# 外网测试
http://你自己的公网IP地址:8081/

问题

tomcat没有显示正常的页面,阿里云镜像的原因,默认是最小的镜像,不必要的都剔除了

# 进入容器内

[root@izuf65ldvcyvaasah4k2a6z home]# docker exec -it tomcat01 /bin/bash

# 拷贝 webapps.dist下的所有文件到webapps
root@e4e40c0812b9:/usr/local/tomcat# cp -r webapps.dist/* webapps
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值