Docker学习笔记-1

jiang 发表于2021-02-21 23:16:06 最后修改于2025-01-22 19:43:07 4928

centos安装docker

卸载docker

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

安装docker

#需要的安装包
sudo yum install -y yum-utils

#设置镜像仓库
sudo yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

#更新yum软件包索引
yum makecache fast

#安装docker docker-ce 社区版 docker-ee 企业版
sudo yum install docker-ce docker-ce-cli containerd.io

启动docker

#启动
systemctl start docker

#查看版本
docker version

#测试
docker run hello-world

#查看镜像
docker images

卸载docker

#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io

#删除资源 /var/lib/docker 默认工作路径
rm -rf /var/lib/docker

配置阿里云镜像加速

#新建目录
sudo mkdir -p /etc/docker

#写入配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://qvlt5t3n.mirror.aliyuncs.com"]
}
EOF

#重启
sudo systemctl daemon-reload
#重启
sudo systemctl restart docker

docker常用命令

可以在官网查看命令官网命令帮助

#显示版本信息
docker version

#显示docker系统信息
docker info

#docker帮助命令
docker 命令 --help

镜像命令

docker images

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
hello-world   latest    bf756fb1ae65   14 months ago   13.3kB

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

#-a, --all   显示所有镜像
#-f, --filter filter   过滤
#-q, --quiet       只显示镜像id

搜索镜像

# 也可以去dockerhub搜
docker search 镜像名字

下载镜像

# 默认tag为latest
docker pull 镜像名字

[root@VM-12-15-centos ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete 
f6c208f3f991: Pull complete 
88a9455a9165: Pull complete 
406c9b8427c6: Pull complete 
7c88599c0b25: Pull complete 
25b5c6debdaf: Pull complete 
43a5816f1617: Pull complete 
1a8c919e89bf: Pull complete 
9f3cf4bd1a07: Pull complete 
80539cea118d: Pull complete 
201b3cad54ce: Pull complete 
944ba37e1c06: Pull complete 
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #这里是真实地址
# 等价于 docker pull mysql docker.io/library/mysql:latest
#指定tag
docker pull 镜像名字:tag

删除镜像

docker rmi -f 容器id或名字 #删除指定容器
docker rmi -f 容器id 容器id #删除多个容器
docker rmi -f $(docker images -aq) #删除全部容器

容器命令

有镜像才能创建容器,一个镜像可以创建多个容器,他们的关系就类似类和对象的关系下载centos镜像测试学习

docker pull centos

新建容器并启动

docker run [ 可选参数 ] 镜像

# 可选参数

--name="容器名字" 容器名字 mysql1 mysql2 用来区分容器
-d 后台运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器端口 -p 8080:80 -p 主机端口:容器端口 -p 容器端口
-P 随机指定端口

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

列出所以运行的容器

# 当前运行容器
docker ps [可选参数]

# 不加参数 当前运行的容器
# -a 表示 当前运行的容器+历史运行的容器
# -n=2 表示 显示最近创建的2个容器
# -q 表示 只显示容器id

exit #容器直接停止并退出
ctrl + p +q #退出容器不停止

删除容器

docker rm 容器id # 删除指定的容器 不能删除正在运行的容器 强制删除rm -f
docker rm -f $(docker ps -aq) #删除所有的容器

启动和停止容器

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

常用其他命令

后台启动容器

docker run -d 镜像名
docker run -d centos #后台运行centos镜像的容器
docker ps #发现没有在运行
#因为docker 后台运行必须有一个前台进程,docker没有发现应用会自己停止

查看日志

docker logs 容器id
docker losg 容器id -tf 容器id #显示全部日志
docker logs -tf --tail 13 容器id #显示13条日志

查看容器进程信息

docker top 容器id

查看容器信息

docker inspect 容器id

进入当前正在运行的容器

#方式一 进入后开启新的终端
docker exec -it 容器id bashshell
#方式二 进入正在执行的终端
docker attach 容器id

从容器内拷贝到主机上

docker cp 容器id:文件目录 主机目录

入门安装

安装nginx

docker search nginx
docker pull nginx
docker images
docker run -d --name nginx01 -p 80:80 nginx
docker ps
docker exec -it 容器id /bin/bash

安装mysql

docker run -d --rm --name="mysql01" -e MYSQL_ROOT_PASSWORD=123456 mysql #--rm 用来测试 用完就删除容器,-e 环境配置修改

docker exec -it 容器id /bin/bash

docker stats #查看容器内存占用

联合文件系统

一层又一层的文件,容器是运行在镜像的上一层,容器文件打包成一个镜像相当于在原来镜像的层又加了一层文件,变成了镜像。

        789 #第三层 
    456     #第二层  
123         #第一层

commit镜像

自己新建一个自己的镜像

docker commit 提交容器成为一个新的镜像副本
docker commit -a="作者名" -m="注释" 容器id 镜像名:tag名

使用数据卷

直接使用命令来挂载 -v ,容器的文件和主机目录的文件同步

-v 主机目录:容器目录

匿名挂载和具名挂载

没有指定则挂载目录全在/var/lib/docker/volumes/卷名/_data

匿名挂载

-v 容器内目录

#查看卷
docker volume ls

具名挂载

-v 卷名:容器目录 #具名挂载 用的多
-v 容器目录 #匿名挂载
-v 主机目录:容器目录 #指定目录挂载

扩展

-v 卷名:容器目录:参数 

参数可为 ro rw
ro (read only) 在容器只能读,rw在容器内可读可写

数据卷容器

两个或者多个容器实现数据共享
容器1想要容器2的数据 容器2称为数据卷容器也叫父容器
创建容器的时候 容器1名字 --volumes-from 容器2的名字
相当于 容器1 extends 容器2

初识Dockerfile

Dockerfile 就是用来构建docker镜像的文件,命令脚本。
dockerfile文件内容如下,文件的内容指令(大写)

FROM centos

VOLUME ["volume01","volume02"] #这里是匿名挂载容器两个根目录文件volume01和volume02

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

DockerFile指令

FROM #基础镜像
MAINTAINER #镜像是谁写的 姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤,添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留的端口
CMD #容器启动的时候的命令 只有最后一个会生效,可被替代
ENTRYPOINT #容器启动的时候的命令 可以追加命令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建时设置环境变量

例如其中CMD ls -a 不能追加 ls -a -l
ENTRYPOINT ls -a 可以追加 ls -a -l

构建自己的centos

dockerfile 文件内容

FROM centos
MAINTAINER jhh<123@qq.com>
#设置环境变量MYPATH为/usr/loacl
ENV MYPATH /usr/local
#设置工作路径为MYPATH
WORKDIR $MYPATH
#安装vim
RUN yum -y install vim
EXPOSE 80
CMD echo "===end==="
CMD /bin/bash

构建镜像

# -f 为file指dockerfile文件 -t 为tag目标
docker build -f dockerfile -t mycentos:1.0 .

查看构建镜像的历史

docker history 镜像id

发布镜像到 DockerHub

登录

[root@centos dockertest]# 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

打上标签

#打上标签
docker tag 本地镜像名字:tag 用户名/远程镜像名:tag
#查看镜像
docker images
# 发布
docker push 用户名/远程镜像名:tag

发布镜像到 阿里云容器镜像服务

登录阿里云Docker Registry

docker login --username=用户名 registry.cn-hangzhou.aliyuncs.com

拉取和推送

# 拉取
docker pull registry.cn-hangzhou.aliyuncs.com/jhh_docker/my_private_docker:[镜像版本号]
# 推送
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/jhh_docker/my_private_docker:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/jhh_docker/my_private_docker:[镜像版本号]

Docker网络

docker0网络

容器互联 --link

本质hosts映射,不推荐使用

自定义网络

网络模式 bridge: 桥接 (默认,自己设置也用这个)
none: 不配置网络
host: 和宿主机共享网络

docker network ls

默认创建是带有 --net bridge

docker run -d -P --name nginx01 --net bridge nginx

自己定义网络

docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

使用自定义网络

docker run -d -P --name nginx01 --net mynet nginx

网络连通

docker network connect mynet nginx01

jiangzong 2022-08-08 10:10:12
头像
Great 回复
头像

jiang

积土而为山,积水而为海。

Copyright © 2017-2020 嘉丽谷 版权所有