Docker

一、docker服务常见命令

安装docker
yum -y install docker
1.查看docker版本
命令: docker -v


image.png

2.启动docker
命令: systemctl start docker
3.关闭docker
命令: systemctl stop docker
4.看到docker运行状态
命令: systemctl status docker (此时我已经开启了docker)


image.png

因为开启了docker 所以会出现红框中 active running
5.重启docker
命令:systemctl restart docker
6.开机启动docker
命令:systemctl enable docker

总结:


image.png

二、docker镜像相关命令

1.查看本地镜像
命令: docker images

image.png

这里新装的docker 本地没有镜像 所有只有表头
2.搜索远程镜像
例如我们需要redis镜像,首先我们去查询一下是否有redis镜像
命令:docker search redis
![image.png](https://upload-images.jianshu.io/upload_images/11123638-b4f83f8ce2f8b20c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
3.拉取远程镜像
命令:docker pull redis:5.0 (名称 :版本号)
这里(redis:5.0) :号后的为版本号,如果不写默认为最新 latest
image.png

下载完成后,再查看本地镜像,redis 5.0 已经下载到本地
image.png

这里注意:版本号不能乱写,我们需要到 hub.docker.com 网址查找对应的软件版本号,这里以redis为例子。
image.png

image.png

这里看到 5.0 tag版本号是有的,不是乱写的。
4.删除本地镜像
本地已有镜像
image.png

删除指定镜像 命令: docker rmi 镜像ID
docker rmi 5a3c8e192943
image.png

注意:假如两个镜像的ID一样,删除命令可以用 docker rmi REPOSITORY:TAG
遇到如下错误,就可以使用这种方法:
image.png

了解:删除所有的镜像
image.png

总结:
image.png

docker容器相关命令

容器由镜像来产生,就好比镜像是一个类,容器就是实例。
1.查看容器、创建容器、进入容器
参数含义:
-i :一直保持运行,就是说客户端没有连接该容器,该容器也会一直保持运行。
-t :一个终端,可以进入容器输入一些命令 ,可以和i 连着写-it
--name :给这个容器取一个名字
镜像名:版本号 :以哪一个镜像创建容器
/bin/bash :进入容器的一个初始化值
命令: docker run -it --name=c1 镜像名:版本号 /bin/bash

image.png

表示已经进入容器。@后就是容器的ID
查看容器里面的内容:
image.png

退出容器:exit
image.png

查看docker 里面有哪些运行的容器:
命令: docker ps
image.png

注意:这里只有表头,但是我们刚才 运行了一个redis容器为什么没有,应为用 -it 这个命令创建运行的容器,在exit执行以后,该容器会关闭。
命令: docker ps -a 关闭和没关闭的容器都可以看到
image.png

第一种创建容器的特点:(终端)
1创建以后立马进入该容器 2 exit执行以后,会关闭该容器
第二种创建容器
参数:d 后台运行该容器。
特点:后台运行。1创建以后不会立马进入容器,需要执行命令才会进入该容器。2exit执行以后,不会自动关闭该容器。
命令:docker run -id --name=c2 redis:5.0
image.png

此时没有进入容器 执行 docker exec -it 容器名字 /bin/bash
image.png

退出容器,但是不关闭容器,容器依旧运行着
image.png

总结:
image.png

4.启动容器
先查看容器运行的状态,c2状态为关闭,执行 docker start 容器名
image.png

c2容器已经启动
5.停止容器
先查看容器运行的状态
image.png

执行停止命令: docker stop 容器名
image.png

此时c2容器已经关闭,状态已经为exited
6.删除容器
注意:容器停掉以后,才能删除容器
命令: docker rm 容器名 (以r1容器为例)
image.png

此时 r1已经被删除
根据所有的容器id删除所有容器(如果出错,请先关闭正在运行的容器)
docker rm docker ps -aq
7.查看容器信息
命令: docker ps -aq 查看所有容器的id
image.png

命令:docker inspect 容器名 查看容器的信息
image.png

小结:
image.png

三、docker容器的数据卷

1.数据卷 简单理解为一个文件或者目录


image.png

2.配置数据卷


image.png

注意:~相当于 root ,宿主机中 可以写~或者/root ,容器中必须写为/root
命令:docker run -it --name=r1 -v ~/data:/root/data_container 镜像名:版本号
image.png

在宿主机上:/root/data 下创建了一个hhb.txt


image.png

在容器里面/root/data_container 也有hhb.txt文件
image.png

image.png

删掉了容器,宿主机/root/data 下依然还有hhb.txt。

docker数据卷容器


命令:docker run -it --name=c3 -v /volume redis:5.0 创建一个数据卷容器


image.png

命令:查看创建的c3容器的信息 docker inspect c3


image.png

这是我们创建两个容器c1 c2 挂载到c3 容器上,如下都会有一个volume目录
命令:docker run -it --name=c1 --volumes-from c3 redis:5.0 /bin/bash
命令:docker run -it --name=c2 --volumes-from c3 redis:5.0 /bin/bash
image.png

image.png

image.png

在c2容器 volume目录下创建了一个test.txt文件


image.png

我们去c1容器 volume目录下查看是否有test.txt文件
image.png

数据卷小结:
image.png

四、docker应用部署

MySql部署

image.png

在docker容器中部署Mysql,然后通过外部MySql客户端去操作mysql。
1.搜索镜像
docker search mysql
2.拉取Mysql镜像
docker pull mysql:5.7


image.png

3.创建容器


image.png
 docker run -id \
-p 3306:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

执行:


image.png

进入到mysql容器内部:
docker exec -it c_mysql /bin/bash
登录mysql
mysql -uroot -p123456


image.png

3.操作容器中的MySql
我们随意创建一个数据库docker:


image.png

现在我们使用本机的mysql客户端去连接:
image.png

如果连接失败:
在虚拟机中执行:vim /usr/lib/sysctl.d/00-system.conf,在末尾添加net.ipv4.ip_forward=1
image.png

然后重启network服务: systemctl restart network
重启docker的mysql容器后就可以连接成功。
在客户端 建user表插入两条数据


image.png

在docker中mysql查看数据
image.png

tomcat部署

1.搜索tomcat镜像
docker search tomcat
2.拉取tomcat镜像(没有指定版本号,默认下载是最新的)
docker pull tomcat


image.png

3.创建容器


image.png

4.部署项目
外部机器访问tomcat
把打包的项目放在 /root/tomcat 目录下,如果访问失败,重启docker容器。

Nginx部署

1.搜索Nginx镜像
docker search nginx
2.拉取Nginx镜像
docker pull nginx
3.创建容器
首先我们需要创建一些目录


image.png
user nginx;
worker_processes  1;
error_log /var/log/nginx/error.log warn;
pid       /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout   65 ;
    include /etc/nginx/conf.d/*.conf;
}

然后退出到nginx目录下:

image.png
docker run -id --name=c_nginx \
-p 80:80 \
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
-v $PWD/logs:/var/log/nginx \
-v $PWD/html:/usr/share/nginx/html \
nginx
image.png

在html目录下创建index.html页面


image.png

4.测试访问
启动 nginx 容器


image.png

image.png

Redis部署

1.搜索Redis镜像
docker search redis
2.拉取Redis镜像
docker pull redis:5.0
3.创建容器,设置端口映射
docker run -id --name=c_redis -p 6379:6379 redis:5.0


image.png

redis容器已经启动:


image.png

4.测试访问
使用外部机器连接redis
image.png

在redis-cli.exe文件当前目录下,cmd,执行一下命令:
redis-cli.exe -h reids服务器的ip地址 -p reids服务器的端口号
image.png

此时已经连接上我们部署的redis服务器。我们可以进行一些简单的操作。
image.png

五、Dockerfile (用来制造docker镜像)

1.Docker 镜像原理

image.png

image.png
image.png

总结:
1.bootfs相当于系统的内核,而我们创建启动docker需要依赖操作系统,所以直接复用宿主机的内核,不用在加载,docker和宿主机的内核共用一个,所以docker启动会很快。
2.在内核上我们可以叠加许多rootfs基础镜像,以及其他镜像 比如这里 jdk,tomcat镜像。当我们去下载tomcat镜像时,会查询所需要的镜像是否已经下载,如果没有,就需要下载所需要的镜像,这里rootfs基础镜像以及 jdk镜像。所以我们只下载tomcat镜像时,却会下载几百M的数据(rootfs基础镜像+ jdk镜像)。
3.当我们去下载ngnix镜像时,他需要去下载rootfs基础镜像,此时我们已经下载过tomcat镜像,rootfs基础镜像已经被下载加载过了,就不需要再次下载rootfs基础镜像,达到了一个复用的作用。
4.只读镜像,这些镜像不可以修改,修改了别人就不能复用了。


image.png

2.Dockerfile 概念及作用

Docker 镜像如何制作?
一、第一种
1.容器转为镜像
命令:docker commit 容器id 新的镜像名称:版本号
镜像不可以传输给别人,但是可以变成压缩文件传给别人。当我们一个容器(tomcat)部署了一个项目时,我们直接变成压缩文件给测试人员,测试人员把压缩文件转为镜像,可以直接拿来测试,不需要再次部署项目。
2.镜像转为压缩文件
o表示 output
命令:docker save -o 压缩文件名称 镜像名称:版本号
3.压缩文件转换为另一个镜像
i代表:intput
命令:docker load -i 压缩文件名称
注意:
通过这种方式挂载的目录文件会丢失,不是挂载目录下文件不会丢失。
二、第二种 dockerfile

image.png

查看别人的dockerfile是怎么写的找到对应的版本直接点进去:以mysql5.7为例
https://github.com/docker-library/mysql/blob/ee33a2144a0effe9459abf02f20a6202ae645e94/5.7/Dockerfile.debian
image.png

3.Dockerfile 关键字语法

Dochub网址: https://hub.docker.com

image.png

image.png

4.案例

第一个案例:
自定义一个centos7镜像,要求:
1.默认登录路径为/usr
2.可以使用vim
实现步骤:
(1)定义父镜像:FROM centos:7
(2)定义作者信息:MAINTAINER hhb hhb@it.cn
(3)执行安装vim命令:RUN yum install -y vim
(4)定义默认的工作目录:WORKDIR /usr
(5)定义容器启动执行的命令:CMD /bin/bash
创建dockerfile文件:

image.png

执行vim centos_dockerfile后输入:

FROM centos:7
MAINTAINER hhb <hhb@it.cn> 
RUN yum install -y vim
WORKDIR /usr
CMD /bin/bash

创建好centos_dockerfile文件后,使用build命令构建镜像:
最后的 . 代表寻找路径
命令:docker build -f dockerfile文件路径 -t 新镜像的名称:版本 .


image.png

image.png

正常方法使用自己创建的镜像就行。

第二个案例:
步骤:
部署soringboot项目:
自己创建一个springboot项目,打包成jar包

image.png

测试jar包是否有问题:
image.png

image.png

正常运行,说明打包的jar没有问题。
把jar包放在linux系统的root目录下:
image.png

把jar包放在docker-files目录下,准备添加到我们自己创建的dockerfile中,然后创建镜像:
执行vim springboot_dockerfile后输入下面代码:

FROM java:8    #定义父镜像
MAINTAINER hhb <hhb@it.cn>  #定义作者信息
ADD docker-0.0.1-SNAPSHOT.jar app.jar  #将jar包添加到容器
CMD java -jar app.jar  #定义容器启动执行的命令

通过dockerfile构建镜像: docker build -f dockerfile文件路径 -t 镜像名称:版本


image.png

最后通过镜像创建容器:


image.png

测试我们的app镜像时候能访问到springboot项目:
image.png

五、Docker 服务编排

image.png

Docker Compose服务编排工具:


image.png

1.安装docker compose

在安装compose之前,需要先安装docker,我们以编译好的二进制方式安装在Linux系统中

curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

设置文件可执行权限

chmod +x /usr/local/bin/docker-compose

查看版本信息

docker-compose -version
image.png

2.卸载docker compose

二进制包方式安装的,删除二进制文件即可

rm /usr/local/bin/docker-compose

3.使用docker compose编排ngnix+springboot项目

(1)创建docker-compose目录

mkdir  ~/docker-compose
cd ~/docker-compose

(2)编写docker-compose.yml文件 (文件必须为这个名字)
执行 vim docker-compose.yml 命令后输入下面内容:

version: '3' 
services: 
 ngnix: 
  image: nginx 
  ports: 
    - 80: 80 
  links: 
    - app 
  volumes: 
    - ./nginx/conf.d:/etc/nginx/conf.d 
 app: 
  image: app 
  expose: 
   - "8080" 

含义解释:

version: '3'  //版本号
services:    //我们要创建启动哪些容器
 ngnix:      //容器1
  image: nginx     //通过哪个镜像启动,这里是nginx镜像,后面没有写版本号,为latest
  ports:     //端口映射
    - 80:80     //宿主机80端口映射到容器80端口, ‘-’   这个符号代表数组的意思
  links:    //当前项目可以访问到的其他项目
    - app   //对应app项目
  volumes:  //目录挂载,也就是数据卷
    - ./nginx/conf.d:/etc/nginx/conf.d          //宿主机./nginx/conf.d挂载到容器/etc/nginx/conf.d
 app:    //容器2
  image: app   //app镜像我已经在前面创建过了,包含了一个springboot项目
  expose:  //对外暴露的端口
   - "8080"

(3)创建./nginx/conf.d目录

mkdir -p ./nginx/conf.d

(4)在./nginx/conf.d目录下编写hhb.conf文件
listen 80; 监听的端口
access_log off; 日志关闭
location / {
proxy_pass http://app:8080; //反向代理到的路径
}

server{
  listen 80;
  access_log off;
  location / {
    proxy_pass http://app:8080;
  }
}

(5)退出到docker-compose.yml文件所在的目录后,直接启动

image.png

image.png

在浏览器中访问linux系统ip地址:80端口
访问http://192.168.0.105/hello这里hello是我在springboot项目中中写的一个controller,然后返回的hello my dockerfile这段文字。
image.png

六、Docker 私有仓库

1.搭建私有仓库

当我们的服务器无法访问互联网,或者不想把我们的镜像上传到公网上,就可以搭建一个私有仓库
(1)拉取私有仓库镜像

docker pull registry

(2)启动私有仓库

docker run -id --name=registry -p 5000:5000 registry

(3)打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
(4)修改daemon.json
追加下面内容阿里镜像加速器

vim /etc/docker/daemon.json

在上述文件中国添加一个key,保存退出。此步用于让docker 信任私有仓库地址;注意私有仓库服务器ip修改为自己私有仓库服务器真是ip
{"insecure-registries": ["私有仓库服务器ip:5000"]}
(5)重启docker 服务

systemctl restart docker

执行测试:


image.png

image.png

这里私有仓库已搭建成功,要让我们的私有仓库能用,必须让docker信任我们的私有仓库。


image.png

image.png

2.上传镜像到私有仓库

(1)标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器ip:5000/centos:7
(2)上传标记的镜像
注意:1删除标记的镜像使用镜像的名称来删除,使用id的话,会发现被标记的镜像和生成的标记镜像id相同 2记得启动创建的registry私有仓库容器,不然上传会报错,连接拒绝。

docker push 私有仓库服务器ip:5000/centos:7
image.png

image.png

3.从私有仓库拉取镜像

方便测试,我们先删除生成的标记对象


image.png

拉取命令:

docker pull 私有仓库镜像名称:版本号

七、docker容器虚拟化与传统虚拟机比较

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容