最近入门了一下docker,主要是因为交互题/环境题越来越多,赛后复现不得不用docker搭环境(不想学也得学了

试了一些指令和题目,也踩过一些坑

之后学习过程中发现新的东西也会记录下来吧

感谢指点我的生蚝和haxo还有空白

安装Docker

apt-get install docker.io

启动docker

systemctl start docker

关闭docker

systemctl stop docker

重启docker

systemctl restart docker

自动启动docker

systemctl enable docker

查看docker运行状态

systemctl status docker

docker开启时

输入ifconfig会发现新增了名为docker0的设备

nc docker0Ip 端口 即可链接题目

Docker常用命令

查看docker配置和信息

docker info

查看docker版本

docker version

列出所有容器(正在运行)

docker ps


#CONTAINER ID: 容器 ID
#IMAGE:        使用的镜像
#COMMAND:      启动容器时运行的命令
#CREATED:      容器的创建时间
#STATUS:       容器状态(7种)
#PORTS:        容器的端口信息和使用的连接类型(tcp\udp)
#NAMES:        自动分配的容器名称
 
#STATUS:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)

查看所有运行中的容器状态

docker stats

进入容器

docker exec imagename/imageID

列出所有镜像

docker images

#REPOSITORY:表示镜像的仓库源
#TAG:       镜像的标签版本号
#IMAGE ID:  镜像ID
#CREATED:   镜像创建时间
#SIZE:      镜像大小 

搜索镜像

docker search imagename

拉取镜像

docker pull imagename
#后面加:tag 是拉取指定版本的镜像

运行容器

docker run -it -d --imagename
# -it 表示 与容器进行交互式启动
#-d 表示可后台运行容器

运行已存在的容器

docker start imagename/imageID

停止容器运行

docker stop imagename/imageID

强制停止容器运行

docker kill imagename/imageID

重启容器

docker restart imagename/imageID

删除容器

docker rm -f imagename/imageID

查看容器运行日志

docker logs -f --tail=查看末尾多少行  iamgeID
#默认是查看全部

dockerfile

从dockerfile中生成镜像

docker build . -t 'imagesID'

“.”表示当前目录下

运行镜像

docker run -d -p host port:docker port images

docker run -it -p  1229:9999 crazy 

#-e             设置环境变量
#-d	        后台运行,返回容器ID
#-P(大写)	随机端口映射,Docker将随机分配映射的端口
#-p(小写)       将容器的端口映射到主机的端口
#-it	        为容器分配一个交互式伪终端

dockfile命令

FROM 构建新镜像基于的基础镜像
LABEL 标签
RUN 构建镜像时运行的Shell命令
COPY 拷贝文件或目录到镜像中
ADD 解压压缩包并拷贝
ENV 设置环境变量
USER 为RUN、CMD和ENTRYPOINT执行命令指定运行用户
EXPOSE 声明容器运行的服务端口
WORKDIR 为RUN、CMD、ENTRYPOINT、COPY和ADD设置工作目录
CMD 运行容器时默认执行,如果有多个CMD指令,最后一个生效

  FROM ubuntu:20.04
#FROM指令必须是dockerfile中非注释行的第一个指令
#比如这个指定了基于ubuntu20.04的镜像

# FROM php:7.4-apache
#这个镜像基于PHP7.4和Apache服务器,可以用于运行PHP应用程序,并提供Apache作为Web服务器。

ENV DEBIAN_FRONTEND noninteractive
#设置环境变量 DEBIAN_FRONTEND,值设为 noninteractive。这样设置的目的是使 Debian 包管理器(如 apt-get)以非交互模式运行
#这样在安装软件包时将不会提示用户进行交互式选择,而是使用默认选项。

(待续)

遇到的坑点:

(1)执行

docker build . -t 'imagename'

出现:unable to prepare context: unable to evaluate symlinks in dockerfile path: FindFirstFile \path\dockerfile: The system cannot find the file specified.


需要将.txt后缀去掉

(2)非root用户执行docker命令时

出现:Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.26/images/json: dial unix /var/run/docker.sock: connect: permission denied

需要命令前加上 sudo

或者换个方法,创建一个docker用户组,把使用的用户加入进去

sudo cat /etc/group #查看当前系统有哪些用户组

sudo groupadd docker #添加docker用户组

sudo gpasswd -a $ID docker #检测当前用户是否已经在docker用户组中,ID是用户名。

sudo gpasswd -a $USER docker #将当前用户添加至docker用户组

newgrp docker #更新docker用户组

dockerHUB

待续


醉后不知天在水,满船清梦压星河