Docker学习笔记

Docker

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

1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。通过 uname -r 命令查看你当前的内核版本

uname -r 

centos版本 3.10.0-514.el7.x86_64

2、初步安装和启动docker

yum update -y
yum -y install docker
systemctl start docker

3、设置镜像

vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://aj2rgad5.mirror.aliyuncs.com"]
}

####docker 命令

  • docker images #列出所有镜像
  • docker run ... # 运行容器
  • docker ps ... #查看正在运行的容器
  • docker exec it(编号) bash 进入运行的容器
  • docker stop [NAME]/[CONTAINER ID]:将容器退出。
  • docker kill [NAME]/[CONTAINER ID]:强制停止一个容器。
  • docker rm [NAME]/[CONTAINER ID]:不能够删除一个正在运行的容器,会报错。需要先停止容器。
  • netstat -na|grep 8080: 查看端口是否占用
  • docker run -d -p 8080:80 hub.c.163.com/library/nginx 将程序映射到端口
  • docker run -d -P hub.c.163.com/library/nginx 容器中的所有端口映射到主机随机端口
docker 镜像删除

1.停止所有的container,这样才能够删除其中的images:

docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:

docker rm $(docker ps -a -q)

2.查看当前有些什么images

docker images

3.删除images,通过image的id来指定删除谁

docker rmi <image id>

想要删除untagged images,也就是那些id为的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

docker rmi $(docker images -q)

docker rmi -f $(docker images -q [imageid/imagename] | sort -u) 删除多个同id的镜像这里写代码片

运行springboot

Dockerfile

FROM hub.c.163.com/library/java:openjdk-8-jdk-alpine
VOLUME /tmp
ADD eureka-server_01-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

docker 推送镜像到仓库

docker login hub.c.163.com 登录网易云基础服务私有镜像仓库

docker tag test/centos:6.5 hub.c.163.com/dangernear/centos:6.51 修改镜像标签信息

docker push hub.c.163.com/dangernear/centos:6.51 将新镜像上传至私有镜像仓库

https://www.163yun.com/help/documents/68510213955833856

Dockerfile 语法
FROM   		# 基础镜像 
MAINTAINER  # 谁写的
RUN 		# 镜像构建的时候需要执行的命令
ADD			# 会自动解压
WORKDIR		# 镜像的工作目录
VOLUME		# 挂载目录
EXPOSE		# 保留端口配置
CMD			# 指定这个容器启动的时候要运行的命令,只有最后一个会生效, 可被替代
ENTRYPOINT  # 指定这个容器启动的时候要运行的命令 ,可以追加指令
ONBUILD		# 当构建一个被继承的dockerFile 这时候会运行该命令。触发指令
COPY 		# 类似ADD , 将文件拷贝到镜像中
ENV 		# 构建的时候设置环境变量

Dockerfile Volume与docker -v的区别:
Dockerfile中声明了匿名卷但是run的时候没有使用 -v绑定匿名卷的话那么docker就会在/var/lib/docker/volumes这个目录下创建一个目录来绑定匿名卷。

docker run -itd -name redis1 -v /data:/share/data image-redis
//运行一个容器并且将当前机器的/data目录绑定到容器的匿名卷中
docker build -f [dockerfile] -t [name:version] #创建docker
docker exec it [id] /bin/bash .  # 进入运行的docker

Dockerfile 文件

FROM docker.io/majiajue/jdk1.8
MAINTAINER panlei315@live.cn
VOLUME /opt/docker/data
ADD user-0.0.1-SNAPSHOT.jar /user.jar
ENTRYPOINT ["java","-jar","/user.jar"]

docker create --name=myjava 创建一个容器

生命周期图:
在这里插入图片描述
指令图:
在这里插入图片描述

Docker 网络

docker 使用的是网络桥接( veth-pair),宿主是docker0的一个网桥
所有容器都不指定网络的情况下, 都是通过docker0路由的,docker0 会给容器分配一个默认可用的IP

– link

当我们编写一个微服务,dburl=ip,项目不重启,ip 换掉了,我们希望可以处理这个问题,可以通过名字进行访问吗?

docker run -d -P --name tomcat2 --link tomcat3 tomcat

这样在tomcat2容器中通过ping tomcat3就可以连接了,缺陷是tomcat3访问不到tomcat2,现已不支持使用,可通过自定义网络的形式实现这种效果

查看docker 内部详细参数可以用docker inspect

自定义docker网络:

docker network ls  #查看docker所有网络
# 创建一个自己的网络
docker network create --driver brige --subnet 192.168.0.1/16 --gateway 192.168..0.1 mynet
# 通过mynet 运行一个docker 容器
docker run -d -P --name tomcat-net-01 --net mynet tomcat
rancher 安装

sudo docker run -d --restart=always -p 8888:8080 rancher/server rancher安装

三刷

docker

安装:

文档:https://docs.docker.com/engine/install/

1、卸载历史版本

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、初始化docker依赖

sudo yum install -y yum-utils

3、指定yum 源

sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
    
#推荐使用阿里云源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装最新版本docker

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

5、选择安装版本(非必须)

yum list docker-ce --showduplicates | sort -r

docker-ce.x86_64  3:18.09.1-3.el7                     docker-ce-stable
docker-ce.x86_64  3:18.09.0-3.el7                     docker-ce-stable
docker-ce.x86_64  18.06.1.ce-3.el7                    docker-ce-stable
docker-ce.x86_64  18.06.0.ce-3.el7                    docker-ce-stable
# 指定版本
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io

6、启动

sudo systemctl start docker
# 运行一下命令就安装成功
sudo docker run hello-world

容器命令

docker run image

# 参数说明
--name="Name" 		容器名字 tomcat01 tomcat02
-d 					后台方式挂起
-it					使用交互方式运行,进入容器查看内容
-p					指定容器端口 -p 8080:8080
-P					随机指定端口

# 启动容器并进入
docker  run -it centos /bin/bash

exit			#退出容器,容器停止
ctrl + Q + P    #退出容器,容器不停止

查看日志

# 查看全部日志
docker logs -tf e866fe9899c6 
# 查看 指定条数日志
docker logs -tf --tail 10  e866fe9899c6

2020-11-05T00:44:32.485251000Z 1:M 05 Nov 2020 00:44:32.484 * DB saved on disk
2020-11-05T00:44:32.502602000Z 1:M 05 Nov 2020 00:44:32.502 * DB saved on disk

# 查看进程
docker top [容器ID]

# 查看镜像元数据
docker inspect [容器ID]

docker 复制

# 从容器内拷贝文件到主机
docker cp [容器ID]:[容器内路径]  [目的主机路基]
docker cp e866fe9899c6:/home/helloword.java /data

查看docker内存

docker stats 

commit

docker commit 提交容器成为一个新的镜像

docker commit -a="作者" -m="提交的描述信息"  [容器id]  [目标镜像名]:[tag]
docker commit -a="pl" -m="tomcat" e866fe9899c6 tomcat2:2.1

容器数据卷

# 直接用命令挂载
docker run -it -v [主机目录]:[容器目录] [镜像名称] /bin/bash
docker run -it -v /home/data/test:/home tomcat /bin/base

# 可以通过docker inspect 方式查看

# 查看挂载卷
docker volume ls

DRIVER              VOLUME NAME
local               05003b8e1729f465bd48dd4630d06d64c4c4fdfa66a59e1904f670d3ec9c5c1d
local               13c591f66f248b71ac4d4bc6dc6ac71f48bd4ef1ee049748f150449077d97953
local               17520c3bd146321927a4fb344d8bd8652b1bfff0dda13308abe3483be78deb1a
local               1bd5246ecac396744651f02b7ac97631ee611a2630975f6824828f5695ee8668
local               2638ecc9c3cfb867de4425c7795d1b5b64a3ccefc6d63b44c3bd1f386c1f276c
local               38bf71ad3614850484f4ba9c88361f473276afa5bd08c44a52c62a346c1b7e34
local               3d66d67322218f53883fe6139b1b19098e38462a7dd24b6f9e1d0f3b2085ca20
local               59d70b8a489b6472368228b3211bd561ed3c319636138e33b6f7b084a72ed876

VOLUME NAME 为主机挂载

# 查看匿名卷具体存储目录
docker volume inspect 05003b8e1729f465bd48dd

[
    {
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/05003b8e1729f465bd48dd4630d06d64c4c4fdfa66a59e1904f670d3ec9c5c1d/_data",
        "Name": "05003b8e1729f465bd48dd4630d06d64c4c4fdfa66a59e1904f670d3ec9c5c1d",
        "Options": {},
        "Scope": "local"
    }
]

# 同步数据卷 删除父容器卷后,文件还会存在
docker run -it --name centos2 --volume-from centos02 dockerhub/centos

docker-compose

官方文档:https://docs.docker.com/compose/

安装

1、下载:

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

2、授权

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

docker-compose -v   # 显示版本信息

体验

根据官网的demo:https://docs.docker.com/compose/gettingstarted/

python应用。计数器

1、应用 app.pay

2、DockerFile 打包镜像

3、Docker-compose.yaml文件 (web、redis)

4、启动compose项目 (docker-compose up)

流程:

1、创建网络

2、执行 Docker-file文件

3、执行Docker-compose文件

Docker-compse:

version: "3.8"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"

docker-compose 文件三层结构

version:版本
services:服务
	服务1: web
		#服务配置
		images
		build
		nerwork 
		...
	服务2:redis
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值