Docker使用


安装docker步骤

安装docker

sudo yum install -y yum-utils

docker安装阿里云镜像

yum-config-manager \
    --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   //推荐使用阿里云镜像

清空yum缓存

yum makecache fast

安装docker docker-ce社区 ee-企业版 )推荐使用ce

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

#阿里云官方镜像加速器

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://4zbi919c.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docke

docker卸载

#卸载docker
1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

Docker常用命令

帮助命令

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

镜像命令

docker images 查看所有本地的主机上的镜像在这里插入图片描述
#解释

REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的 id
CREATED 镜像的创建时间
SIZE 镜像的大小

docker search 搜索镜像

docker search mysql  #搜索出mysql

--filter=stars=5000
举例:docker search mysql --filter=stars=5000   #搜索出5000stars的镜像

docker pull 下载镜像

#下载镜像  docker pull 镜像名:[tag]
docker pull mysql       #如果后面不写tag,那么下载的就是最新的镜像 

docker pull mysql:5.7   #下载mysql  后面的版本号必须mysql官网要有的版本号

docker 删除

docker rmi -f 镜像id                 #删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id    #删除多个镜像
docker rmi -f $(docker images -aq)  #删除所有的镜像

容器命令

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

下载镜像
docker pull centos
#启动并进入容器 
docker run -it centos /bin/bash  

#查看容器内的内容
ls

#从容器中退回主机
exit;            #容器停止并退出
Ctrl  + P +  Q   #容器不停止并退出

docker ps 命令

-a     #列出当前正在运行的容器+历史运行的容器
-n=?   #显示最近创建的容器
-q     #只显示容器的编号

删除容器

docekr rm 容器id                    #不能删除正在运行的容器
docker rm -f $(docker ps -aq)      #删除所有的容器
docker ps -a -q|xargs docker rm    #删除所有的容器

启动和停止容器的操作

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

常用其他命令

查看日志

-tf    #显示日志
--taill number #要显示日志条数

举例查看docker日志命令  查看10条日志记录
docker logs  - tf  --tail 10  容器id

查看容器中进程的信息 ps

docker top 容器id

查看元数据

#查看详细信息
docker inspect  容器id

进入当前正在运行的容器

#方式一    
docker exec -it 容器id /bin/bash   

#方式二
docker attach 容器id

exec和attach的区别?
#docker exec    #进入容器后开启一个新的终端,可以在里面操作(常用)
#docker attach  #进入容器正在执行的终端

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

docker cp 容器id:/home/test.java /home

docker安装nginx

#拉取nginx镜像
docker pull nginx

#启动nginx镜像  -d代表后台运行  --name nginx01为容器命名  -p宿主机端口 3344访问端口 80是默认端口
docker run -d --name nginx01 -p 3344:80 nginx

#本地测试链接访问nginx端口,成功会谈html网页Welcome to nginx!
curl localhost:3344

docker安装tomcat

#下载tomcat
docker pull tomcat:9.0

#启动tomcat      
docker run -d -p 3355:8080 --name tomcat01 tomcat

#将webapps.dist下面的所有的文件拷贝到webapps  因为官方的问题减少了文件,webapps下面是空的
#文件都在webapps.dist下面里面,所以将它拷贝过来
cp -r  webapps.dist/* webapps

开启安全组3355端口号 进行访问http://ip:3355/

docker部署elasticsearch

#启动elasticsearch
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2

es是十分耗内存的,所以需要给es限制内存,不然就会卡死
新增-e ES_JAVA_OPTS=“-Xms64m -Xmx512m” 限制es内存
docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

#查看内存消耗 
docker stats 容器id   

#再进行访问成功
curl localhost:9200 在这里插入图片描述

可视化

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

#开放安全组 8088端口 进行访问
http://ip:8088/

commit镜像

#如果下载下来的官网上面的tomcat-webapps里面文件缺少,自己添加了webapps文件
#可以直接进行将这个版本镜像进行提交,下次可以使用自己的这个镜像
docker commit -a="lxc" -m="add webapps app" 53ac4b88102f tomcat02:1.0

容器数据卷

什么是容器数据卷?
举例:假如安装了mysql容器,数据都存储在mysql上面,如果删除容器,那么随之数据库数据也会被删除,所以需要容器数据卷来进行容器的数据同步和持久化!

使用数据卷
方式一:之间使用命令来挂载-v

#启动 docker run -it -v 主机目录,容器内目录
docker run -it -v /home/ceshi:/home centos /bin/bash

#查看容器详细信息
docker inspect 容器id

#详细信息中出现以下代码表示挂载成功
"Mounts": [
        {
     "Type": "bind",
     "Source": "/home/ceshi",
     "Destination": "/home",
     "Mode": "",
     "RW": true,
     "Propagation": "rprivate"
    }           
],          

这个时候在容器的/home目录下面添加数据,linux主机上面的/home文件也会同步数据!

docker安装mysql

#安装命令
docker pull mysql:5.7

#-d 后台运行
#-p 端口映射
#-v 卷挂载
#-e 环境配置
#--name 容器名字
docker run -d -p 3310:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

#启动成功,用本地sql连接工具测试连接是否成功,记得安全组开放3310端口,因为3306映射到了3310端口!

安装redis

#安装命令
docker pull redis

#启动容器并设置密码
docker run -p 6379:6379 --name redis -v /usr/local/docker/redis.conf:/etc/redis/redis.conf -v /usr/local/dockr/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass "111111"


具名挂载

#匿名挂载
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx

#卷的名称,匿名就是一串加密,具名就是自己命名
[root@iZwz9br4vz6ttielfqtswjZ home]# docker volume ls
DRIVER    VOLUME NAME
local     5389a65775fd56af2ea02f6bf3880f6de33e7439e67862c421b17a8113ec67ed
local     c968d5ad9000637e1a93c21237de03cf41e4592da7b34bab69526be05218c37e
local     juming-nginx


#可以查看到卷在容器内的路径
[root@iZwz9br4vz6ttielfqtswjZ home]# docker volume inspect juming-nginx
[
    {
        "CreatedAt": "2021-08-30T21:40:40+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

--所有的docker容器内的卷,没有指定路径,都会在/var/lib/docker/volumes/juming-nginx/_data 路径下

如何确定是具名挂载还是匿名挂载,还是指定路径挂载
-v 容器内的路径 #匿名挂载
-v 卷名:容器内的 #具名挂载
-v /宿主机路径:容器内路径 #指定路径挂载

容器权限

#ro readonly #只读
#rw readwrite #可读可写
#一旦设置了容器的权限,容器内部无法操作,只能通过宿主机来更改权限
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

DockerFile介绍

DockerFile就是来构建docker镜像的构建文件!命令脚本!

#创建并进入文件
vim dockerfile1

#文件内填写这些信息
FROM centos

VOLUME ["volume01","volume02"]

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

按esc然后: 加wq回车进行保存

#启动dockerfile
docker build -f dockerfile1 -t kuangshen/centos .

#进入docker镜像
docker run -it 镜像id /bin/bash

#查看详细信息,里面会有匿名挂载的记录volume01,volume02
ls -l     

构建步骤:
1、编写一个dockerfile文件
2、docker bulid构建成为一个镜像
3、docker run 运行镜像
4、ocker push 发布镜像(DockerHub、镜像仓库!)

dockerFile的指令

FROM #基础镜像,一切从这里开始
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像,,这个tomcat压缩包,添加内容
WORKDIR #镜像的工作目录
VOLUME #用来挂载
EXPOSE #暴露端口
CMD #指定这个容器启动的时候要运行的命令
ENTRUPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile 这个就会运行 ONBUILD的指定,触发指定。
COPY #类似ADD,将文件拷贝到镜像中
ENY #构建的时候设置环境变量!

创建自己的centos

#1 编写自己的dockerfile文件

FROM centos
MAINTAINER kuangshen<24736743@qq.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

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

#2、通过这个文件构建镜像

命令:docker build -f  mydockerfile-centos -t mycentos:0.1 .

成功之后显示以下内容
Successfully built ef6051cb715c
Successfully tagged mycentos:0.1

原来下载的官网centos像vim,查看ip地址等因为缺少命令都无法使用,
现在可以之间进入容器使用到这些命令

#用这个history可以查看到这个容器的历史更改记录
docker history 容器id  

CMD和ENTRYPOINT 区别?

CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令

测试cmd

#创建文件
vim dockerfile-cmd-test

#写入文件内容
FROM centos
CMD ["ls","-a"]

#启动这个dockerfile文件,构建镜像
docker build -f dockerfile-cmd-test -t cmdtest .

#run运行,ls命令可以使用!
docker run 容器id

#在cmd直接用docker run 容器id -l 会直接报错要,要加ls
docker run 容器id ls -l

制作tomcat镜像

1、准备镜像文件tomcat、Jdk压缩包放入服务器

2、编写Dockerfile文件,官方命名Dockerfile

FROM centos
MAINTAINER kuangshen<24736743@qq.com>

COPY readme.txt /usr/local/readme.txt

ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.23.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.23
ENV CATALINA_BASH /usr/local/apache-tomcat-8.5.23
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.23/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.23/bin/logs/catalina.out

3、#构建镜像
docker build -t diytomcat .

4、启动镜像

docker run -d -p 9090:8080 --name kuangshentomcat -v /home/kuangshen/build/tomcat/test:/usr/local/apache-tomcat-8.5.23/webapps/test -v /home/kuangshen/build/tomcat/tomcatlogs/:/usr/local/apache-tomcat-8.5.23/logs diytomcat

5、访问测试

curl localhost:9090

发布自己的镜像

1、地址https://hub.docker.com注册账号
2、确定这个账号能登录,使用账号登录

docker login -u 账号名字

3、使用命令进行发布镜像
hyccrz这是作者名字,diytomcat是镜像名字,后面一定要跟版本号!

docker push hyccrz/diytomcat:1.0

发布到阿里云
1、登录到阿里云
2、找到容器镜像服务-创建个人实例-创建命名空间
在这里插入图片描述

3、创建镜像仓库
直接创建,最后选择本地仓库!

4、将基本信息里面的操作指南的命令走一遍就好了!就可以发布成功了!
在这里插入图片描述

Docker 网络

在这里插入图片描述
docker怎么进行网络访问?

1、先启动一个tomcat容器
docker run -d -P --name tomcat01 tomcat

2、查看容器ip地址
#进入容器
docker exec 容器id  /bin/bash
#查看ip地址
cat /etc/hosts

3、ping第二个ip地址,linux可以ping通docker内部ip地址!
ping ip地址

每启动一次docker容器,docker就会给容器分配一个ip,我们只要安装了docker,就会有一个网卡docker0桥接模式,使用的技术是evth-pair技术!

evth-pair就是一对对的虚拟设备接口,他们都是成对出现的,一段连着协议,一段彼此相连!
evth-pair充当一个桥梁,连接各种虚拟机设备
假设:tomcat01和tomcat02,他们直接的连接是共用了同一个docker0路由器,所有的容器在不指定网络的情况下,都是用的docker0分配的ip地址!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值