docker学习笔记

文章目录

  • docker介绍
    • 1.镜像
    • 2.容器
    • 3.Docker Registry
  • 一、docker学习笔记
    • 1.镜像拉取/启动
    • 2.列出容器
    • 3.退出容器
    • 4.删除容器
    • 5.启动及停止容器
    • 6.显示log
    • 7.查看容器信息
    • 8.进入容器
    • 9.拷贝
    • 10.查看改动
    • 11.docker build
    • 12.DockerFile
    • 13.docker commit命令
    • 14.重命名容器
    • 15.centos 7 下载安装vim
  • 二、容器数据卷
  • 四、Docker网络
  • 五、docker compose
  • 六、
  • 二、docker安装部署nginx, tomcat, portainer
    • 1.nginx
    • 2.tomcat
    • 3.portainer
    • 4.jenkins


docker介绍

1.镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件。它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。
可以理解为虚拟机的快照,里面包含了所有部署的应用程序和它所关联的所有库。
通过镜像可以创建多个不同的容器。
docker学习笔记_第1张图片

镜像加载原理
docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统叫UnionFs
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删除。
docker将应用和环境打包成一个镜像,发布之后,启动运行

2.容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样;
镜像:是定义
容器:是实体
镜像是模板,容器是实例
容器消亡时,容器存储层也随之消亡。任何保存于容器存储层的信息都会随容器删除而丢失。
Docker 最佳实践原则:容器不应该向其存储层内写入任何数据
所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

3.Docker Registry

一个集中的存储、分发镜像的服务
Docker Registry公开服务允许用户免费上传、下载公开的镜像

一、docker学习笔记

1.镜像拉取/启动

docker镜像的拉取:

docker pull centos 拉取镜像
docker run --helper 查看run后可跟随的命令

从该镜像上创建一个容器

docker run -it --name="mycentos" centos /bin/bash
exit 从主机中退回容器centos

(/bin/bash 是控制台
–name=“Name” 给容器起名字
-d 后台运行
-it 使用交互方式运行,进去容器查看内容
-p 指定端口 -p 8090:8090 主机端口:容器端口
-P 随机指定端口)

2.列出容器

docker ps 列出当前正在运行的容器
docker ps -a 查看曾经运行的
docker ps -a -n=1 显示最近创建的1个容器
docker ps -q 只显示容器编号``

docker学习笔记_第2张图片

3.退出容器

exit 退出容器,会关闭容器,需要restart重启容器,然后用attach命令才能再次进入容器
Ctrl + P + q 退出容器但不停止容器

4.删除容器

docker rm 3093bde27248 移除容器(通过id)
docker rm -f $(docker ps -aq) 递归删除全部容器

5.启动及停止容器

docker start 3093bde27248 启动容器(通过id)
docker restart 3093bde27248 重启容器
docker stop 3093bde27248 停止当前正在运行的容器
docker kill 3093bde27248 强制停止/杀掉容器
docker run -d centos 必须要有一个前台进程才能启动成功

6.显示log

先启动docker镜像:

 docker logs 142b32c2fd91  -f -t --tail 100

–tail N 仅列出最新N条容器日志
-f 跟踪日志输出
-t : 显示时间戳

7.查看容器信息

查看容器进程信息:

 docker top 142b32c2fd91

查看容器的所有信息(状态、配置、ip端口等):

 docker inspect 142b32c2fd91

8.进入容器

常用进入当前正在进行的容器,开启一个新的终端:

 docker exec -it 142b32c2fd91 /bin/bash

以交互方式进入容器:

 docker attch 142b32c2fd91

9.拷贝

将文件拷贝到主机上:

docker start 64d9309de604
docker attach 64d9309de604
cd home
ls
touch test.java
ls
exit
docker cp 64d9309de604:/home/test.java /home

10.查看改动

docker diff 88b9c9215b1a

11.docker build

#查看帮助
docker build -h

#根据dockerfile构建镜像
docker build /root/dockerfile-dir #绝对路径,也可以用相对路径.

#第二次构建就快很多,给镜像重命名tag
docker build /root/dockerfile-dir -t -test-image:v1.0

12.DockerFile

作用:根据dockerfile构建出一个镜像出来
dockerfile:用来构建镜像的文件,定义了一切的步骤,源代码
dockerImages:通过dockerfile构建生成的镜像,最终发布和运行的产品

DockerFile命令分类

BUILD Both RUN
FROM WORKDIR CMD
MAINTAINER USER ENV
COPY EXPROSE
ADD VOLUME
RUN ENTERPOINT
ONBUILD
.dockerignore

DockerFile命令说明

命令 说明
FROM (这个镜像的妈妈是谁?)基础镜像,一切从这开始构建
MAINTAINER (告诉别人谁负责养他?-最新官方已建议用LABELS)镜像是谁写的
RUN (你想让他干啥)镜像构建时需要运行的命令
ADD (给点创业资金)将文件拷贝到镜像中,会自动解压
WORKDIR 镜像的工作目录
VOLUME (给它一个放行李的地方)挂载的目录
EXPOSE (它要打开的门是啥)暴露端口(经常用)
CMD 指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT 指定这个容器启动时要运行的命令,设置容器的入口程序可以追加命令(CMD是操作指令,ENTRYPOINT是配置指令)
ONBUILD 一个特殊指令,它后面跟的是其他指令,比如RUN,COPY,而这些指令在当前构建镜像时并不会被执行。只有以当前镜像为基础镜像,去构建下一级镜像时才会被执行
COPY 类似ADD,将文件拷贝到镜像中,不会自动解压
ENV 构建时设置环境变量,用户名、密码等

DockerFile实战
这里先熟悉一些基础Linux命令
Linux

mkdir 创建文件夹
touch 创建文件
rmdir 删除文件夹
rm 删除文件
pwd 显示当前路径
cd 进入目录
ls -l -a 列出目录及文件
mv 旧目录 新目录 重命名
cp a b 复制

DockerFile
准备条件

docker pull centos 拉取镜像
docker run -itd --name mycentos centos /bin/bash
docker ps
docker start mycentos
docker attach mycentos
ls
mkdir home
mkdir mydoc
cd mydoc
ls
touch mydockerfile
vi mydockerfile

复制并copy到mydockerfile,按esc,按:wq保存

FROM centos
MAINTAINER Lizongliang<[email protected]>

ENV MYPATH /user/local
WORKDIR $MYPATH

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

EXPOSE 90

CMD echo $MYPATH
CMD echo "--end--"
CMD /bin/bash
cat mydockerfile
docker build -f mydockerfile -t mysys:0.1 .

13.docker commit命令

作用:将容器的存储层保存下来成为镜像。换句话说,就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。

docker commit -a="levi" -m="add webapps" 6bccd795dbd6 mytom.1.0 #提交镜像
docker images #查看提交了的镜像

14.重命名容器

docker rename 旧容器名 新容器名

15.centos 7 下载安装vim

注意:请在centos7进行,centos 8 会报错

yum -y install vim

二、容器数据卷

  • 如果数据在容器中,容器删除则数据丢失
  • 容器之间可以有一个数据共享的技术,这就是卷技术
  • 将容器内的目录挂载到宿主机上

将容器的目录挂载到自己电脑的E盘文件夹

docker run -it -v /home/ceshi:/home centos /bin/bash  #(Linux)
docker run -it -v E:\docker_redis\doc:/home centos /bin/bash #(Windows环境,E:\docker_redis\doc请修改为具体文件夹路径,-v: 绑定一个卷)
docker inspect b24ab729f057 #查看是否挂载成功,成功会有"Mounts"路径
docker ps
docker attach b24ab729f057 进入容器
cd home
touch test.java #在home文件夹建立一个.java文件后,在E:\docker_redis\doc也会
看到这个.java文件
cat test.java #查看这个文件的内容【linux命令】

以上是bind方式挂载
volume方式待续
Mysql持久化问题待续22

四、Docker网络

待续

五、docker compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。使用 YML 文件配合Compose命令,配置、创建、启动应用程序需要的所有服务。
示例:
在Linux文件夹中,建立一个postgres.yml文件

cd /home/composefiles
vim postgres.yml

postgres.yml填写内容

version: "3.6"
services:
  postgres:
    image: postgres:14.0
    container_name: postgres
    ports:
      - 5432:5432
    restart: always
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=123456
    volumes:
      - "/usr/local/postgresql/data:/var/lib/postgresql/data"

在home/composefiles目录下运行命令:

# yml配置了要拉取的镜像、启动的容器名称、端口、环境变量、挂载路径等,只要一条命令,就可以完成以上步骤,省去了docker run的复杂命令
docker-compose -f postgres.yml up -d
docker ps

六、

docker swarm
CI/CD jenkins流水线

待续

二、docker安装部署nginx, tomcat, portainer

1.nginx

nginx是一个高性能的web服务器:

docker pull nginx 拉取镜像
docker run -d --name mynginx -p 3344:80 nginx 启动镜像
localhost:3344 在本机Win电脑浏览器输入即可看见nginx已启动(注意防火墙需要开通3344端口)
 docker exec -it mynginx /bin/bash

2.tomcat

用完即删:

docker run -it --rm tomcat:9.0 下载tomcat用完即删

docker pull tomcat:9.0 或者直接下载镜像
docker run -d -p 3355:8080 --name mytom tomcat 启动
http://localhost:3355 浏览器启动,提示404无法访问,原因:默认最小镜像
cp -r webapps.dist/* webapps 运行这句,把必要的文件拷贝到webapps外面,再输入http://localhost:3355即可访问tomcat

3.portainer

portainer:docker的图形化管理工具,提供一个后台面板:

docker run -d -p 8077:9000 --restart=always -v /var/run/docker.sock --privileged=true portainer/portainer
http://localhost:8077/ 浏览器访问时报错
docker run -d --name portainer -p 8077:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer 改用这个再输入浏览器地址即可访问

4.jenkins

#root权限进去jenkins容器
docker exec -it -u root jenkins bash

你可能感兴趣的:(docker,docker,容器,linux,服务器)