Docker入门

系统:centos7.8

常用命令

官网文档地址:https://docs.docker.com/get-started/

docker version # 显示版本

docker info # 显示详细信息

docker --help #帮助

curl localhost:8080 # 本机端口测试

docker stats # 查看docker占用cup 内存情况
docker tag 镜像ID 镜像名字[:版本号] # 复制镜像,镜像名字[:版本号]为新镜像

官网命令地址:https://docs.docker.com/engine/reference/run/

一、安装Docker

1、跟新仓库

sudo yum install -y yum-utils

2、设置源

sudo yum-config-manager \

--add-repo \

https://download.docker.com/linux/centos/docker-ce.repo

3、安装Docker引擎

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

4、启动Docker

sudo systemctl start docker

5、通过运行hello-world 映像验证 Docker 引擎是否已正确安装

sudo docker run hello-world

如启动失败,需要配置镜像源地址 /etc/docker/daemon.json (改文件需要新创建)添加内容如下:

{ 
"registry-mirrors": ["https://alzgoonw.mirror.aliyuncs.com"] 
}

二、镜像命令

1、查看所有镜像

docker images

2、搜索镜像

docker search mysql

3、下载镜像

cocker pull mysql # 默认最新版
cocker pull mysql:5.7 # 指定版本

4、删除镜像

docker rmi -f e73346asdf # 删除此镜像全部内容,e73346asdf为镜像ID,通过docker images查询
docker rmi -f $(docker images -aq) # 删除全部镜像
docker rmi -f ID1 ID2# 删除多个镜像

三、容器命令

1、先pull个centos系统,基本镜像

docker pull centos

2、创建镜像容器

docker run [可选参数] image

--name Nginx
-d 后台方式运行 # docker run -d centos   通过此方式创建容器PS是看不到的,没有前台应用会自动停止
-it 交互运行并进入
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
docker run -it centos /bin/bash # 终端交互模式,启动并进入容器,进入容器后就是一个基础centOS系统,很多命令不完善

docker run -d --name Nginx01 -p 8080:80 nginx # 指定名字,后端运行

docker run -it --rm centos # 用完就删除,一般用于测试

3、终端在容器时退出容器

exit # 停止并退出
ctrl + P + Q # 快捷键,不停止退出

4、查看运行

docker ps # 查看正在运行的
docker ps -a # 查看正在运行和曾经运行的
docker ps -a -n=3 # 显示最近创建的3个容器
docker ps -aq # 只显示容器编号

5、删除容器

docker rm 容器id # 删除此容器全部内容,不能删除运行中的容器
docker rm -f 容器id # 能删除运行中的容器
docker rm -f $(docker ps -aq) # 删除全部容器
docker ps -a -q|xargs docker rm # 删除全部容器

6、启动(后台运行)、停止容器

docker start 容器ID # 启动
docker restart 容器ID # 重新启动

docker stop 容器ID # 停止容器
docker kill 容器ID # 暴力停止容器

7、查看日志

docker logs
docker logs --help # 查看日志命令帮助

8、查看容器内各进程信息

docker top 容器ID

9、查看容器详细信息

docker inspect 容器ID

10、进入当前正在运行的容器

docker exec -it 容器id /bin/bash # 方式一、终端模式进入容器,进入容器开启新的终端(常用)
docker attach 容器id # 方式二、进入容器正在执行的终端

11、文件拷贝,docker到主机(卷技术可以自动复制)

docker cp bdfb0ad4253a:/home/b.txt . # 主机终端运行此命令,从docker中复制文件b.txt出来到当前文件夹

12、docker可视化工具:1、portainer 2、Rancher

13、容器commit成镜像,提交到本地

docker commit -m="提交信息" -a="作者" 容器ID 目标镜像名:[版本号]

四、数据卷

可以实现容器和主机,容器和容器之间数据共享,双向绑定,实际原理是在主机共享同一个文件。

删掉容器时,挂载的文件还存在主机上

卷常用命令

docker volume --help
docker volume ls # 查看所有本地容器,查出的是容器ID

方式一:挂载

1、数据卷挂载,挂载后可通过docker inspect 查看

docker run -it -v 主机目录地址:容器目录地址 容器名 /bin/bash   # 可写多个-v映射多个目录

2、匿名挂载、具名挂载

-v 容器内路径 # 自动挂载(匿名)
-v 卷名:容器内路径 # 指定名字挂载,名字前没有/,有/代表的是路径(具名)

docker volume inspect juming # 查看卷挂载路径mountpoint为主机地址

方式二:Dockerfile

1、创建Dockerfile文件dockerfile01,文件无后缀

FROM centos
VOLUME ["volume01","volume02"] # 创建两个匿名挂载,主机文件夹匿名,容器文件夹为volume01,02
CMD echo "---end---"
CMD /bin/bash

指令都是大写

#表示注释

从上到下执行,每一个指令为一层

FROM # 基础镜像
MAINTAINER # 作者
RUN # 镜像构建时运行
ADD aa.tar.gz /usr # 添加内容 .tar.gz会自动解压
WORKEDIR # 镜像工作目录
VOLUME # 挂载目录
EXPOSE # 保留端口配置
CMD ["ls","-a"]# 运行容器run时运行,run时如果追加命令会替换运行
ENTRYPOINT # 运行容器run时运行,run时叠加运行
ONBUILD # 构建子镜像时触发运行
COPY *.jar /app.jar # 将文件拷贝到镜像中,当前文件的所有jar包放入/app.jar
ENV  # 构建时设置环境变量

例:

FROM centos
MAINTAINER linpan
ENV MYPATH /usr
WORKDIR $MYPATH # 进入docker时会直接进入/usr
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash

docker history 镜像ID # 可以查看镜像的创建过程

2、构建镜像,文件名为Dockerfile时不需要-f指定文件路径

docker bulid -f Dockerfile文件路径 -t 镜像名字[:版本] . # .为生成的镜像存放在当前文件夹

3、容器与容器之间数据卷文件共享

docker run --it --name docker02 --volumes-from docker01 镜像ID # 通过--volumes-from继承docker01的数据卷,当docker01容器删除后,docker02的数据卷依然存在

4、发布镜像,在DockerHub注册帐号

1、docker login --help # docker login -u lin
2、docker push 作者名字/镜像名称:版本号

五、docker网络

通过veth-pair虚拟网络桥接,虚拟路由docker0与主机物理网卡通过NAT连接

桥接:主机相当一个桥梁,虚拟一个路由,不同容器通信都是通过主机的虚拟网卡桥接的,容器之间不是直接通信的。

容器和容器,容器和主机默认是可以ping通的

1、容器通过名字ping通

docker run -it --name centos02 --link centos01 centos /bin/bash 
# --link centos01可以通过容器名字使01、02ping通
# 02可以ping通01,01如要ping通02需要配置
ping centos01 

2、查看网络

docker network --help

docker network ls # 查看所有docker网络
docker network inspect # 查看所有docker网络的详细内容

3、查看centos02 的网络配置是连接到centos01的,修改centos01的配置就可以01ping02

(要实现容器互联,不推荐此方法,推荐自定义网络)

docker exec -it centos02 cat /etc/hosts # hosts下会有ip与名字的绑定信息

自定义网络

docker网络有以下几种方式

a、bridge桥接(默认)

b、none

c、host主机模式:和主机共享网络

d、container容器内网络连通

1、通过创建网络实现容器互通

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# --driver bridge使用桥接模式,可以不写
# --subnet 192.168.0.0/16 创建子网网段
# --gateway 192.168.0.1 创建网关
# mynet 网络名字

docker network ls # 可以查看到创建的mynet网络
docker network inspect mynet # 可以看到mynet详细信息

2、通过mynet创建容器

docker run -it --name centos02 --net mynet centos /bin/bash 
# 不写/bin/bash 不会进入容器命令行

3、通过自定网络创建的容器,容器相互可以通过名字ping通

4、容器连通其他网络

docker network connect --help
docker network connect mynet centos07 
# 容器centos07连接到网络mynet,原理是改变 centos07 IP,一个容器两个IP

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值