Docker相关命令笔记

一、Docker安装

1、卸载
1.卸载老版本docker:
sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-enginee
2、安装依赖工具
2.安装docker的依赖工具
yum install -y yum-utils
3、设置镜像的仓库
3.设置镜像的仓库
官方:
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo # 默认国外的
推荐使用阿里云,加载速度快:
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  #

3.1.更新yum软件包索引
yum makecache fast # 缓存清空
4、安装docker
4.安装docker相关的(默认最新版本)  docker-ce社区版
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

2)安装指定版本
yum list docker-ce --showduplicates | sort -r  # 查看可进行安装的docker版本
yum install docker-ce-20.10.17 docker-ce-cli-20.10.17 containerd.io docker-compose-plugin

格式:sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-compose-plugin
5、启动docker服务
5.启动docker
systemctl start docker
6、添加阿里云加速地址

阿里云网站:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
在这里插入图片描述

加速配置:
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://cotgs0z6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload		# 加载修改的配置
sudo systemctl restart docker		# 重启服务
7、查看docker版本信息
7.使用docker version 查看是否安装成功
[root@szb ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.17
 API version:       1.41
 Go version:        go1.17.11
 Git commit:        100c701
 Built:             Mon Jun  6 23:05:12 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.17
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.17.11
  Git commit:       a89b842
  Built:            Mon Jun  6 23:03:33 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.6
  GitCommit:        10c12954828e7c7c9b6e0ea9b0c02b01407d3ae1
 runc:
  Version:          1.1.2
  GitCommit:        v1.1.2-0-ga916309
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

8、测试拉取一个镜像
8.测试hello-world
docker run hello-world

查看下载的镜像
[root@szb ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB
9、卸载docker
9.卸载docker
卸载依赖,删除资源目录
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
rm -rf /var/lib/docker   # docker的默认工作路径
rm -rf /var/lib/containerd
10、帮助文档

docker官方文档指导

11、官方镜像源

Docker Hub

12、安装docker-compose
以下是常规安装方式,但是本人上述安装中,已经安装了docker-compose-plugin,命令也和之前的有区别:docker compose version,怀疑是现在已经不需要额外安装了,默认和docker一起安装上了,待考证!!!

1.直接命令安装
curl -L "https://github.com/docker/compose/releases/download/2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

2.或者直接在浏览器上打开https://github.com/docker/compose/releases 找到对应的版本,下载放到/usr/local/bin/目录下面

3.赋予权限:
chmod +x /usr/local/bin/docker-compose

4.报错:如果出现docker-compose不存在,则执行以下命令:
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

5.注意:新版本docker可以直接yum安装

官方帮助文档
Install Docker Compose

Compose V2 帮忙文档:
Compose V2 | Docker Documentation

二、帮助命令

1.docker version  		# 显示docker的版本信息
2.docker info     		# 显示详细的系统详细,包括镜像和容器的数量
3.docker 命令 --help 	# 万能命令,显示该命令的详细信息,以及使用方法

三、docker相关命令

1、镜像
1.拉取镜像
docker pull 镜像名      		# 默认下载最新版本的镜像
docker pull 镜像名:版本号 	    # 下载指定版本

2.查看镜像
docker images   				# 查看本地主机上的镜像
-a  #列出所有镜像           
-q  #只显示镜像的id

3.搜素镜像
docker search 镜像名
--f       	# 过滤选项
eg:docker search --filter=SIZE=5000 mysql

4.删除镜像
docker rmi 镜像id  #删除镜像,必须停止并且删除容器后,才可以删除镜像
docker rmi 镜像id  镜像id   #删除多个镜像
docker rmi $(docker image -aq) #删除所有本地的镜像
-f	# 强制删除

5.查看镜像构建历史
docker history 镜像id

6.导入导出镜像
docker save -o /opt/imagesname.tar  # 导出镜像
docker load -i /opt/imagesname.tar	# 导入镜像
2、容器
有镜像才能创建容器
1.新建容器并启动
docker run [选项] 镜像名
--name='centos01' #容器的名称,用于区分同一镜像创建的不同容器
-d   # 后台运行
-it  # 交互式运行,并进入容器查看内容
-P	 # 大P为随机映射端口
-e   # 环境配置
--volumes-from  # 数据卷容器之间的同步
–dns=1.1.1.1	# 默认采用宿主机dns主机,自定义参数配置

# 指定映射端口的三种方式:
-p 容器端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口
示例:dcoker run -it --name centos01 -p 80:80 centos

2.docker ps   # 列出正在运行的容器
-a  # 列出正在运行的容器+历史上运行的容器
-q  # 列出正在运行的容器ID
-n=? # 显示最近创建的容器

3.容器启动、停止操作--start/restart/stop/kill
docker start 容器id	   # 启动容器
docker restart 容器id  # 重启容器
docker stop 容器id     # 停止容器 
docker kill 容器id     # 强制停止容器

4。进入容器
docker exec -it  CONTAINER ID(容器的编号)  /bin/bash # 进入容器后,会开启新的终端,在里面操作(常用)
docker attach 容器id # 进入容器后,不会开启新的终端,直接使用正在运行的终端

docker inspect -f "{{.State.Pid}}" a5d89c9bc46d  # 获取容器pid
nsenter -t 15647 -m -u -i -n -p					 # 通过pid进入容器

5.退出容器
exit     # 退出并停止容器
Ctrl+q+p   #退出不停止容器

6.删除容器
docker rm 容器id   			# 删除指定容器,不可以删除正在运行中的容器
docker rm $(docker ps -aq)  # 删除所有容器
-f		# 可以删除正在运行中的容器
docker  ps -a -q | xargs docker rm  # 删除所有容器

7.拷贝(容器和宿主机互相拷贝文件)
主机文件 --> 容器
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
eg:docker cp /data/test.txt centos:/home

容器文件 --> 主机路径
docker cp 容器名:要拷贝的文件在容器里面的路径   目标主机路径    
eg:docker cp centos:/home/test.txt  /data

8.查看日志
docker logs 容器id
docker logs --tf --tail 日志显示条数 容器id
-t	# 显示时间戳
-f	# 关注日志输出,不主动退出屏幕输出,默认结束打印,持续查看

9.查看容器中的进程数
docker top 容器id

10.查看镜像的元数据
docker inspect 容器id
-f   # 获取信息的具体字符串
docker inspect -f "{{.NetworkSettings.IPAddress}}" a5d89c9bc46d  # 获取容器ip地址

11.查看容器卷id
docker volume ls

12.查看容器已经映射的端口
docker port 容器id
结构示意图

d

images:

1.commit/create (images -- container)
2.import (tar file --> images)
3.load/save (images -- tar file)
4.build (Dockerfile --> images)
5.pull/push (images -- registry)
6.diff (images -- container)
7.cp (container--> host)
8.export  (container--> tar file)

container:

1.stop
2.start
3.stop/kill
4.pause/unpause
5.run
6.wait
7.logs
8.attach/exec
9.^P ^q
10.inspect
11.port
12.top
13.ps
14.rm

registry:

1.pull
2.push
3.search
4.login
5.logout

Engine:

1.info
2.version
3.events

在这里插入图片描述

在这里插入图片描述

四、实战测试

1、部署nginx
0. docker search nginx # 查询docker仓库的nginx服务镜像版本
1. docker pull nginx   # 拉取nginx默认最新版镜像
2. docker images	   # 查看本地是否拉取
3. docker run -d --name nginx01 -p 80:80 nginx # 启动镜像(重命名,端口映射)
4. docker ps		   # 查看正在运行的容器
5. curl localhost # 验证nginx容器服务是否正常运行

在这里插入图片描述

2、部署Tomcat
docker run -it --rm # 一般用于测试,用完就删
1. docker pull tomcat	# 下载tomcat
2. docker run -d -p 8080:8080 --name tomcat01 tomcat
3. curl localhost:8080 # 验证tomcat容器服务是否正常运行
报错:HTTP状态 404 - 未找到
4. docker exec -it tomcat01 /bin/bash # 进入容器修改配置
5. root@74b4f75ef056:/usr/local/tomcat# cp -r webapps.dist/* webapps/  # 刷新页面即可

在这里插入图片描述

3、部署portainer
环境少的适用,基于web的docker开源管理程序
Portainer Server 将通过端口 9000(官网最新是9443) 公开 UI,并通过端口 8000 公开 TCP 隧道服务器

github地址:2.14.0

官方地址:Docker Standalone Linux (portainer.io)

Docker图形化界面管理工具
1. 启动并运行portainer容器
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer01 --restart=always  -v /var/run/docker.sock:/var/run/docker.sock  -v /data/portainer_data:/data     portainer/portainer:latest

2. 访问测试:
http://localhost:9000

3. 报错:
[root@szb portainer_data]# curl localhost:9443
Client sent an HTTP request to an HTTPS server.
解决:把请求路径改为https://ip:端口去访问

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

4. 添加远端到portainer
添加dockerd监听2375端口

1)dockerd --help
  -H, --host list       Daemon socket(s) to connect to

2[root@szx ~]# vim /lib/systemd/system/docker.service
dockerd -H fd:// -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2345 --containerd=/run/containerd/containerd.sock

3)加载并重启docker
systemctl daemon-reload
systemctl restart docker 

4)查看哪个服务监听2375
lsof -i 2375

在这里插入图片描述

4、部署Mysql
1. docker pull mysql:5.7
2. docker run -d -p 3306: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
3. 配置参数解析
/etc/mysql/conf.d    # 自定义配置文件
/var/lib/mysql       # 数据库存储目录

五、docker命令实战

1. commit
docker commit -m "添加镜像描述信息" -a="作者" 容器id 目标镜像名:[tag]
例如:将刚修改配置的tomcat打包成一个镜像文件,下次直接启用即可
[root@szb ~]# docker commit -m "添加nginx镜像" -a "szb" 88abb969d237 nginx_webapp:v1

2. 容器卷挂载:-v 
docker run -it -v 主机目录:容器目录 容器ID  # 具名挂载
docker inspect 容器id     # 查看挂载的目录
匿名挂载:-v 卷名:容器内路径

1)具名挂载:-v 参数 卷名:容器内路径
2)匿名挂载:-v 参数后面 没有写上容器之外的地址, docker 自己会在docker内部给你找个位置
3)指定路径挂载: -v /宿主机路径::容器内路径

3、挂载的延伸--具名/匿名挂载
1.用法:docker volume inspect 卷名
或者:
[root@szb ~]# docker volume ls    # 查看当前容器挂载的ID
DRIVER    VOLUME NAME
local     5571d0f4694d54affe3115bed384d03734e560060e0110c6613f6dbcbb7ba01a
[root@szb ~]# docker inspect 5571d0f4694d54affe3115bed384d03734e560060e0110c6613f6dbcbb7ba01a
[
    {
        "CreatedAt": "2022-07-01T18:17:54+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/5571d0f4694d54affe3115bed384d03734e560060e0110c6613f6dbcbb7ba01a/_data",
        "Name": "5571d0f4694d54affe3115bed384d03734e560060e0110c6613f6dbcbb7ba01a",
        "Options": null,
        "Scope": "local"
    }
]
[root@szb ~]# cd /var/lib/docker/volumes    # 容器卷地址

2.具名挂载:
[root@szb local]# docker run -it -d -p 80:80 -v szb:/etc/nginx 66e634b3c555 /bin/bash
[root@szb local]# docker volume ls
DRIVER    VOLUME NAME
local     5571d0f4694d54affe3115bed384d03734e560060e0110c6613f6dbcbb7ba01a
local     szb   # 上面设置的卷名
[root@szb local]# docker inspect szb
"Mountpoint": "/var/lib/docker/volumes/szb/_data",

3.权限
rw :可读可写的权限
ro : 可读权限
[root@localhost ~]# docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro  nginx 

六 Dockerfile

1、dockerfile基础
1. 作用:构建docker镜像的构建文件;
2. 文件参数:(指令大写)
3. Usage(末尾必须有点):docker build .
-f /path/to/a/Dockerfile  # 指定dockerfile文件路径
-t shykes/myapp:1.0		  # 指定存储库和标记
4. 注意:
 	1)不要将根目录 () 用作构建上下文,因为这会导致构建将硬盘驱动器的全部内容传输到 Docker 守护程序
 	2)名字首字母默认大写;
 	3)按顺序运行指令,必须以 FROM 指令开头
5. Docker会使用构建缓存来加速构建过程

文件指令参数

1. FROM		# 指定父镜像,基础镜像,一切从这里开始
2. LABEL   指令是用来生成镜像的元数据标,打标签,key=value
   LABEL   maintainer="shadabin"
3. MAINTAINER   # 设置作者 邮箱  szb<sdb@qq.com>
4. ADD		# 添加步骤,添加压缩包等操作,会自动解压
5. COPY		# 拷贝文件到镜像中,类似ADD,需要手动解压;.war是zip格式,java代码
6. ENV		# 构建的时候设置容器环境变量
7. EXPOSE	# 定义容器暴露端口配置
8. LABEL	# 将元数据添加到镜像
9. RUN		# 镜像构建的时候,容器需要运行的shell命令
10. STOPSIGNAL  # 设置将发送到容器以退出的系统调用信号,指定容器退出的信号值,升级时可能才用
11. USER		# 指定容器执行操作的用户
12. VOLUME	# 挂载的目录;创建一个挂载点,用于挂载外部存储,从而将容器的数据保存到外部存储,避免数据丢失,可以一次创建多个
13. WORKDIR	# 指定镜像的工作目录
14. ONBUILD (与上述指令之一结合使用) # 当构建一个被继承 Dockerfile 这个时候就会运行ONBUILD 的指令
13.ENTRYPOINT  # 指定这个容器启动的时候要运行的命令,可以追加命令;+CMD的参数
15. CMD		# 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代

在这里插入图片描述

2、实战范例

Dockerfile 实战–nginx-tomcat-happroxy

1)centos
GitHub示例:

scratch    # 从零开始
------------------------------------------------------------------------
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /

LABEL \
    org.label-schema.schema-version="1.0" \
    org.label-schema.name="CentOS Base Image" \
    org.label-schema.vendor="CentOS" \
    org.label-schema.license="GPLv2" \
    org.label-schema.build-date="20201113" \
    org.opencontainers.image.title="CentOS Base Image" \
    org.opencontainers.image.vendor="CentOS" \
    org.opencontainers.image.licenses="GPL-2.0-only" \
    org.opencontainers.image.created="2020-11-13 00:00:00+00:00"

CMD ["/bin/bash"]

自己测试:

FROM centos:latest
LABEL name=centos.v1

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN cd /etc/yum.repos.d/
RUN sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
RUN sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*

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

EXPOSE 80

CMD /bin/bash

七、Docker仓库

docker仓库

1、需要创建仓库账号
2、登录

Docker Registry和Harbor单机部署使用

1、docker官网
1.登录
[root@szb ~]# docker login docker.io
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: shadabin
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

2.查看登录成功后隐藏文件(用于保存登录认证信息)
[root@szb ~]# cat /root/.docker/config.json
{
        "auths": {
                "https://index.docker.io/v1/": {
                        "auth": "c2hhZGFiaW46c3piNTMyNzU0OSw="
                }
        }

3. 打tag
[root@szb ~]# docker tag nginx_compile:v1 docker.io/shadabin/nginx_compile:v1   

4.上传到docker镜像
[root@szb ~]# docker push docker.io/shadabin/nginx_compile:v1

5. 更换到其它docker服务下载镜像
docker login https://hub.docker.com

docker官网验证:
在这里插入图片描述

2、aliyun官网

阿里云容器镜像服务

1.登录阿里云Docker Registry
docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
2.从Registry中拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/shadabin/docker:[镜像版本号]
3.将镜像推送到Registry(先第一步登录才可以)
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/shadabin/docker:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/shadabin/docker:[镜像版本号]


八、Docker网络

查看所有的docker网络:
[root@szb ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
b1b7d5e9f103   bridge    bridge    local
a012ac26e047   host      host      local
3c55c058c5b9   none      null      local

网络模式:
bridge:桥接docker(自定义也使用桥接模式)
none:不配置网络
host:和宿主机共享网络
container:容器网络连通(用的少,局限很大)

docker网络实战

九、docker资源限制

docker资源限制

十、Docker Compose

docker-compose实验

十一、报错

dockerfile启动tomcat,浏览器访问不了问题–总结

!!!面试总结

docker面试题

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值