docker基本使用

docker小知识

docker 共享内核,即容器是共享主机操作系统内核但提供用户空间隔离的虚拟环境;Docker容器本质上是宿主机上的进程,Docker通过namespace实现了资源隔离

Docker 四种网络模式

  • none模式,使用–net=none指定,该模式关闭了容器的网络功能。

  • host模式,使用–net=host指定,容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。

  • bridge模式,使用–net=bridge指定,默认设置 ,此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker0虚拟网桥,通过docker0网桥以及Iptables nat表配置与宿主机通信。

  • container模式,使用–net=container:NAME_or_ID指定,创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。

设置docker镜像加速

vi /etc/docker/daemon.json ## 文件路径
{
"registry-mirrors": [
  "https://4j0no3kc.mirror.aliyuncs.com"
]
}

docker基本命令

docker pull {image_name} (拉取镜像)

docker push {image_name} (推送镜像) 

docker images (查看当前机器的所有镜像) 

docker rmi {image_name} (删除当前机器的一个镜像) 

docker tag {source_images_name:tag your_image_name:tag} 为一个镜像打tag 

docker save busybox > busybox.tar 

docker load < busybox.tar.gz

docker ps (显示正在运行的容器)

docker search xxx   (搜索镜像)

docker run --name={your_name} --d {image_name}  (运行容器:第一次)

docker start {容器名字} (启动已存在的容器)

docker ps -s -a  (查看当前所有容器)

docker stop {container_name}  (停止容器) 

docker kill {container_name} (杀死容器)

docker rm -f {container_name}  (删除容器)

docmer rmi {container_name} (删除镜像)

docker rm 'docker ps -a -q' (删除所有的容器)

docker logs -f {容器名称} (查看容器日志)

docker info (查看docker服务信息)

docker inspect {容器名称} (查看docker容器的信息)

docker  exec -it {容器名称} /bin/bash 进入容器,exec的意思是在容器中运行一个命令。 如果是bash 并且指定了-it 就会打开容器的shell 交互

docker cp {container:name}:{container_path}  {host_path}  把宿主机上的一个文件copy到容器中

--name # 为容器指定一个名称

-d 后台运行

-port (指定端口映射规则  -p 8086:8086,前面是宿主机端口,后面的容器端口)

--network 指定容器运行的网路模式

—link 可以用来链接2个容器,使得源容器(被链接的容器)和接收容器(主动去链接的容器)之间可以互相通信,并且接收容器可以获取源容器的一些数据 

-v 指定需要挂载的数据卷,把宿主机文件挂载在容器内,挂载目录的目的是数据持久化,写到宿主机硬盘里,这样容器被你删掉的话,数据才不会丢失

-env  指定需要传递给容器的环境变量

--restart 让docker自动重启容器。--restart会检查容器的退出代码,并根据此来决定是否重启容器,非0时,自动重启

--restart=on-failure:5 当容器退出代码为非0时,docker会尝试自动重启该容器,最多重启5次

在-d 后添加--restart=unless-stopped下次docker启动后,容器就会自动启动

demo


docker run -d --name mariadb -e MARIADB_ROOT_PASSWORD=mariadb -e MARIADB_USER=bn_testlink -e MARIADB_PASSWORD=bn_testlink -e MARIADB_DATABASE=bitnami_testlink --net testlink -v ${PWD}/mariadb:/bitnami bitnami/mariadb

docker run:用镜像启动容器
--name=hub:指定容器的名称
-p 5001:4444:端口映射,5001宿主机端口,4444容器端口
-e:env的缩写,也就是环境变量,传递一些环境变量,让容器启动的时候初始化一些参数
-d:后台运行
-v:挂载,把容器内目录映射到宿主机内,前面为宿主机目录,后面为容器目录

dockerfile基本命令

FROM:基础镜像,FROM 命令必须是 Dockerfile 的首个命令。

LABEL:为镜像生成元数据标签信息。

USER:指定运行容器时的用户名或 UID,后续 RUN 也会使用指定用户。

RUN:RUN 命令是 Dockerfile 执行命令的核心部分。它接受命令作为参数并用于创建镜像。每条 RUN 命令在当前基础镜像上执行,并且会提交一个新镜像层。

WORKDIR:设置 CMD 指明的命令的运行目录。为后续的 RUN、CMD、ENTRYPOINT、ADD 指令配置工作目录。

ENV:容器启动的环境变量。

ARG:构建环境的环境变量。

COPY:复制文件

CMD:容器运行时执行的默认命令。

ENTRYPOINT:指定容器的“入口”。

HEALTHCHECK:容器健康状态检查。

docker的安装

  • mac
    brew cask install docker
  • CentOS
    yum install docker
    ps:不推荐在win上安装docker,所以没写

docker的启动与停止

systemctl start docker     #启动docker

systemctl status docker     #查看docker状态

systemctl stop docker     #停止docker

systemctl restart docker     #重启docker

systemctl enable docker     #开机启动docker

制作镜像的方式

第一种方法

启动已有镜像,进入容器,修改至预期配置后,通过docker commit 容器的名称 镜像的名称:tag,进行提交创建(不会影响原有镜像);不推荐此种方式,如果在大规模的使用镜像,这种镜像制作过程是黑盒的,用户使用镜像时无法得知镜像内有哪些内容,如果想进行改造时,是做不到的;

第二种方法

通过dockerfile进行制作,dockerfile是把制作镜像的过程当做可编程的方式,像写代码一样把制作镜像的过程编程为名叫dockerfile的文件,文件内有不同的指令,每个指令执行不同的任务,通过这种方式可以把制作镜像的过程记录下来,方便用户去了解镜像内有那些内容,方便维护以及进行二次改造。

  • dockerfile基本命令
FROM    指定基础镜像(也叫做继承镜像),指明构建的新镜像是继承于哪个基础镜像
RUN    构建镜像时运行的shell镜像
EXPOSE    声明容器运行的服务端口
ADD    拷贝宿主机的文件或者目录添加至镜像内部(如果是url,会自动下载解压)
COPY    拷贝宿主机的文件或者目录添加至镜像内部(不会自动下载解压)
CMD    启动容器时执行的shell命令
ENV    设置镜像内的环境变量
ENTRYPOINT    启动容器时的shell命令(启动容器时执行的shell命令,同CMD类似,只是由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序;如果存在多个ENTRYPOINT指令,只有最后一个生效)
USER    为RUN、CMD和ENTRYPOINT执行shell命令时指定运行用户
WORKDIR    为后续的RUN、CMD、ENTRYPOINT指令配置工作目录(可以使用多个WORKDIR指令,后续命令如果参数时相对路径,则会基于之前命令指定的路径)
  • dockerfile demo:
FROM selenium/node-chrome-debug:3.7.1-beryllium
USER root
ADD run.sh /root/

RUN apt-get update \
    && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
    && apt-get clean \
    && mkdir -p mkdir -p ~/.vnc \
    && x11vnc -storepasswd work123 ~/.vnc/passwd

ENTRYPOINT ["/root/entrypoint.sh"]

构建镜像

docker build -t testimage:1.0 .
命令解析:-t 设置镜像的名字或标签;testimage 镜像的名字;1.0 镜像的tag;. 代表设置当前目录为工作目录

dockerfile执行过程

ps:dockerfile本质上只是docker commit自动化的过程,dockerfile优势在于可以让使用者很直观的了解到当前镜像有那些功能,做了什么。

常用容器搭建

  • mysql
docker run --name mysql -v $PWD/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=admin -d mysql

$PWD:为变量,取的是当前路径

  • testlink
运行mariadb

docker run -d --name mariadb -e MARIADB_ROOT_PASSWORD=mariadb -e MARIADB_USER=bn_testlink -e MARIADB_PASSWORD=bn_testlink -e MARIADB_DATABASE=bitnami_testlink --net testlink -v ${PWD}/mariadb:/bitnami bitnami/mariadb:10.3.22
运行testlink

docker run -d -p 8080:8080 -p 8443:8443 --name testlink -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_PASSWORD=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --net testlink -v ${PWD}/testlink:/bitnami bitnami/testlink:1.9.20
默认用户名:user,默认密码:bitnami。
8 个赞