ubuntu 18.04 docker学习

elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例

问题

es 暴漏的端口多
es 耗内存
es 数据一般要放入到安全目录-

下载启动镜像

docker run -d --name elasticsearch --net somenetwork -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

卡的朋友 docker stats 查看cpu状态

docker 安装可视化工具 portainer

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --restart=always --name prtainer portainer/portainer
`

```bash
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer  

docker commit :从容器创建一个新的镜像。

语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

实例

将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

runoob@runoob:~$ docker commit -a “runoob.com” -m “my apache” a404c6c174a2 mymysql:v1
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY TAG IMAGE ID CREATED SIZE
mymysql v1 37af1236adef 15 seconds ago 329 MB

精髓

容器数据卷 dockerFile Docker网络
企业实战
docker Compose
docker Swarm
docker Jenkins

容器数据卷

数据?如果数据在容器中。容器删除,数据丢失:数据可以持久化!
容器之间可以有一个数据共享技术。
目录挂载,容器目录挂载在Linux上。
容器间可以共享

使用数据卷

方式一:直接使用命令挂载 -v
docker run -it -v /home/kaka/test:/home centos /bin/bash

dockerfile

构建镜像文件
编写一个dockerfile文件
docker build 构建镜像
docker run
docker push 发布镜像(阿里云仓库)

dockerFile 构建过程

1.每个保留关键字必须是大写字母
2.执行从上到下执行
3.#表示注释
4.每一个指令都会创建一个镜像,并提交。
在这里插入图片描述
dockerfile 面向开发的,发布dockerfile文件。
docker镜像成为企业交付的标准

dockerfile:构建文件,定义了一切的步骤。
Docker images:通过dockerfile构建成的镜像,最终发布和运行的产品。
docker 容器 容器:镜像运行起来提供服务。

dockerfile指令

FROM        ##基础镜像,一切从这里开始
MAINTAINER  ##告诉别人,谁写的
RUN         ##启动
ADD         ##
CMD 		##指定容器运行时候要运行的命令
ENTRYPOINT  ##指定容器启动时候要运行的命令,可以追加命令
ONBUILD     ##当构建一个被继承dockerfile 这个时候就会追加ONBULID命名
COPY        ##类似add,将文件拷贝到镜像
ENV         ##构建时候设置环境变量

在这里插入图片描述

实战

docker hub 中 基础镜像 FROM scratch 配置需要的软件进行构建
在这里插入图片描述

创建自己的centos

1.编写配置文件

FROM centos
MAINTAIER yangxizheng<1183293240@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH 

RUN yun -y install vim
RUN yun -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "----end----"
CMD /bin/bash

2.构建文件

docker build -f mydockerfile -t yangcentos:0.1 .

Successfully built 38457135457d
Successfully tagged yangcentos:0.1

3测试运行

在这里插入图片描述
在这里插入图片描述
dockers history 查看镜像历史。可以研究镜像这么做?

CMD ENTRYPOINT  命令

cmd测试

FROM centos
CMD ["ls ","-a"]

CMD 命名测试通过
root@ubuntu:/home/kaka/dockerfile# vim docker_file_cmd
root@ubuntu:/home/kaka/dockerfile# docker build -f docker_file_cmd -t cmd_test .
Sending build context to Docker daemon 3.072kB
Step 1/2 : FROM centos
—> 300e315adb2f
Step 2/2 : CMD [“ls”,"-a"]
—> Running in b4088b4991a0
Removing intermediate container b4088b4991a0
—> 828f8e41eefc
Successfully built 828f8e41eefc
Successfully tagged cmd_test:latest
root@ubuntu:/home/kaka/dockerfile# docker run 828f8e41eefc

#想追加一个命名 l ls all

ENTRYPOINT  追加命名,是直接追加在我们的ENTRYPOINT命名的后面的

root@ubuntu:/home/kaka/dockerfile# docker run 37aef73ee2da -l
total 56
drwxr-xr-x 1 root root 4096 Jan 15 08:27 .
drwxr-xr-x 1 root root 4096 Jan 15 08:27 …
-rwxr-xr-x 1 root root 0 Jan 15 08:27 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin
drwxr-xr-x 5 root root 340 Jan 15 08:27 dev
drwxr-xr-x 1 root root 4096 Jan 15 08:27 etc
drwxr-xr-x 2 root root 4096 Nov 3 15:22 home
lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64
drwx------ 2 root root 4096 Dec 4 17:37 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 15:22 media
drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt
drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt
dr-xr-xr-x 416 root root 0 Jan 15 08:27 proc
dr-xr-x— 2 root root 4096 Dec 4 17:37 root
drwxr-xr-x 11 root root 4096 Dec 4 17:37 run
lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv
dr-xr-xr-x 13 root root 0 Jan 15 08:27 sys
drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp
drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr
drwxr-xr-x 20 root root 4096 Dec 4 17:37 var
root@ubuntu:/home/kaka/dockerfile#

dockerfile 多测试!!

dockerfile 实战Tomcat镜像

1.准备镜像文件 tomcat压缩包,jdk压缩包!
2.编写dockerfile文件
在这里插入图片描述
在这里插入图片描述

发布镜像

root@ubuntu:/home/kaka/dockerfile# docker login --help

Usage:  docker login [OPTIONS] [SERVER]

Log in to a Docker registry.
If no server is specified, the default is defined by the daemon.

Options:
  -p, --password string   Password
      --password-stdin    Take the password from stdin
  -u, --username string   Username
root@ubuntu:/home/kaka/dockerfile# 

登录docker

root@ubuntu:/home/kaka/dockerfile# docker login -u yangxizheng
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

发送到仓库

root@ubuntu:/home/kaka/dockerfile# docker push yangcentos:0.1
The push refers to repository [docker.io/library/yangcentos]

发布带版本

root@ubuntu:/home/kaka/dockerfile# docker tag 38457135457d yangxizheng/yangcentos:1.0
root@ubuntu:/home/kaka/dockerfile# docker images
REPOSITORY               TAG       IMAGE ID       CREATED        SIZE
yangcentos               0.1       38457135457d   6 hours ago    291MB
yangxizheng/yangcentos   1.0       38457135457d   6 hours ago    291MB
nginx                    latest    f6d0b4767a6c   3 days ago     133MB
mysql                    latest    d4c3cafb11d5   3 days ago     545MB
centos                   latest    300e315adb2f   5 weeks ago    209MB
portainer/portainer      latest    62771b0b9b09   5 months ago   79.1MB
root@ubuntu:/home/kaka/dockerfile# docker push yangxizheng/yangcentos:1.0
The push refers to repository [docker.io/yangxizheng/yangcentos]
7a9b78a4a18c: Preparing 

发布到阿里云镜像服务

在这里插入图片描述
在这里插入图片描述

docker网络 (容器编排 集群部署)

清空所有容器

docker rm -f $(docker ps -aq) 清除正在运行的容器
docker rmi -f $(docker images -aq) 清除所有容器
docker stop $(docker ps -aq)  

docker 网络测试

在这里插入图片描述

问题docker是如何处理容器网络访问?在这里插入图片描述

root@ubuntu:/home/kaka# docker run -d -P --name tomcat01 tomcat

查看容器的内部网络地址 ip addr

docker exec -it tomcat01 ip addr

发现eth0@if262ip地址,docker分配的
linux能ping通吗?

linux能ping通docker容器

每启动一个docker容器都会分配给容器一个ip地址,安装了docker,就会有一个网卡docker0
桥接模式,使用技术evth-pair技术!

我们发现这些容器带来的网卡,都是一对一对的。
evth-pair 就是一对的虚拟设备接口,他们都是成对出现,一段挂着协议,一段彼此连接
技术充当桥梁。连接各种虚拟网络设备

结论 容器和容器之间可以通信的

在这里插入图片描述
结论: tomcat01和tomcat02是共用一个路由,docker0
所有的容器不指定网络的情况下,都是docker0路由,docker会给我们容器分配一个默认的可用的ip
255.255.0.1/16 255*255 -2
255.255.0.1/24 255 -2

小结 桥接技术

在这里插入图片描述

docker中的所有网络接口都是虚拟的,虚拟的转发效率高。
删除网桥都没有了

思考场景

编写一个微服务,database usl = ip;项目不重启,数据库ip换掉,我们希望可以处理这个名字进行访问容器?

–link技术

root@ubuntu:/home/kaka# docker exec -it tomcat03 ping tomcat04
ping: tomcat04: Temporary failure in name resolution

root@ubuntu:/home/kaka# docker run -d -P --name tomcat06 --link tomcat03 tomcat 
9d9d20c7bccd907a2cd63834378993959dfa3d8971e9051550e06eaf81b87ea8
root@ubuntu:/home/kaka# docker exec -it tomcat03 ping  tomcat06

通过–link 可以解决网络连通问题,反向不能ping通

在这里插入图片描述

 docker network inspect 0eeffa9de6e8

探究具体的网络
查看hosts配置

docker exec -it tomcat03 cat /etc/hosts

在这里插入图片描述
我们现在玩docker已经不建议使用 --link
自定义网络!不适应docker0!
docker0问题比较局限
不支持容器名连接访问

自定义网络

容器互联

root@ubuntu:/home/kaka# docker network --help

Usage:  docker network COMMAND

Manage networks

Commands:
  connect     Connect a container to a network
  create      Create a network
  disconnect  Disconnect a container from a network
  inspect     Display detailed information on one or more networks
  ls          List networks
  prune       Remove all unused networks
  rm          Remove one or more networks

Run 'docker network COMMAND --help' for more information on a command.

在这里插入图片描述
网络模式
bridge :桥接 dockers搭桥 (自己也使用)
none: 不配置网络
host: 和宿主机共享网络
container: 容器网络连通!局限

测试

# 我们之前直接启动命令 --net bridge 这个就是我们的docker01
dcoker run -d -P --name tomcat01 --net bridge tomcat
dcoker run -d -P --name tomcat01  tomcat

#更改网络docker0特点,默认不能访问  --link可以打通连接
## 我们自定义网络
root@ubuntu:/home/kaka# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
c9e1142e9ecde42f5525655e43ab4e7572972236ca72002f6d1b307744a4eaa0
root@ubuntu:/home/kaka# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
0eeffa9de6e8   bridge    bridge    local
c26985c7d4ec   host      host      local
c9e1142e9ecd   mynet     bridge    local
2cd470f8f4b3   none      null      local

我们的网络就创建好了

在这里插入图片描述
在这里插入图片描述

root@ubuntu:/home/kaka# docker run -d -P --name tomcat-net-01 --net mynet tomcat

在这里插入图片描述
现在不使用 --link 也可以ping名字啦
我们自定义的网络docker都已经帮我们维护好电对应的关系啦!
好处!!
redis-不同的集群使用不同的网络,保证集群是安全和健康的
mysql- 不同的集群使用不同的网络,保证集群是安全和健康的
在这里插入图片描述

网络连通

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

测试打通网络

在这里插入图片描述

root@ubuntu:/home/kaka# docker network connect mynet tomcat01

一个容器,两个ip
类似阿里云服务器,公网ip 私网ip

root@ubuntu:/home/kaka# docker exec -it tomcat01 ping tomcat-net-01

/home/kaka# docker exec -it tomcat02 ping tomcat-net-01

结论:假设要跨网咯操作别人,就需要使用 docker network connect连通!

实战:部署redis集群

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值