docker学习笔记

概念理解

docker可以理解为一个独立容器,把物理机想象成一个盆,docker可以划分盆内的空间,比如是一个碗。是物理机的缩小版。

以下概念需要理解

镜像:docker容器是一个独立的空间,所以和物理机一样,也需要镜像,安装系统,只不过镜像是特殊的镜像
容器:根据镜像创建出来的一个独立空间
Docker 官方镜像仓库:https://hub.docker.com/

docker镜像仓库提速方案

# 1、修改/etc/docker/daemon.json文件,没有则创建
# 输入以下内容
{
  "registry-mirrors": [
        "https://docker.nju.edu.cn/"
  ]
}
# 现在好多国内镜像源不能使用了,找到一个能使用的,https://docker.lmirror.top
# 2、重启docker服务
systemclt restart docker
# 3、验证下网速
docker pull gitlab/gitlab-ce:14.6.7-ce.0

1、安装

管网安装比较慢,可以设置为清华源,下载docker-ce
下载地址:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

# centos安装
yum install docker
# ubuntu安装
apt-chche madison docker
apt-get install docker
systemctl start docker
# docker和docker-ce是同一个东西,只不过一个是商业版,一个是社区版

2、镜像相关命令

# 1、查看本机镜像
docker images
# 2、查找docker镜像源内的镜像,如查找centos7镜像
docker search centos7
# 3、拉取镜像到本地centos7:版本号
docker pull centos7:latest
# 4、删除镜像
docker rmi 镜像名称
# 5、运行镜像--创建容器
# d:后台运行
# i:以交互模式启动
# t:运行时可以独立启动一个终端
docker run -dit centos7:last /bin/bash
# 6、创建镜像副本,镜像名可以为lgh/centos7:v12,也就是作者/基础镜像:版本号
docker commit -m="update" -a="lgg" 容器id 镜像名
# 7、镜像导出为本地tar包,包名ubuntu_Alphar.tar
docker save -o ubuntu_Alpha.tar 镜像id
# 8、加载本地镜像tar
docker load -i ubuntu_Alpha.tar
# 9、加载完镜像,镜像名称和版本会是空的,设置名称和版本
docker tag 镜像id 镜像名:镜像版本

3、容器相关命令

# 1、查看所有容器
docker ps -a
# 查看运行容器
docker ps
# 2、启动容器
docker start 容器id
# 3、停止容器
docker stop 容器id
# 4、重启容器
docker restart 容器id
# 5、进入容器
docker exec -it 容器id /bin/bash
# 6、删除容器
docker rm -f 容器id
# 7、导出容器快照
docker export 容器id > export_container.tar
# 8、将快照再导入为本地镜像,镜像名为test/import:v1
cat export_container.tar | docker import - test/import:v1
# 9、查看日志命令
docker logs 容器id
3.1、重要命令
# 1、docker启动命令
docker run -dit 
--net=host 设置容器网络模式为主机模式,共享主机网络
--pid=host 方便容器内部与宿主机交互,可以在容器内部运行宿主机命令
--privileged 设置启动容器拥有root权限去执行命令
-v /etc/:/var/ 设置容器/var/目录映射到主机/etc/目录
--name test 设置容器名为test
-p 80:90 将容器90端口映射到主机80端口
-h=test 设置容器主机名为test
--dns=ip_address 设置容器dns到/etc/resolv.conf中
--rm 容器退出时清理容器内部文件系统
# 2、docker拷贝命令
# 从主机拷贝a.txt文件到容器内部/root/目录下
docker cp a.txt 容器名:/root/
# 从容器内部往主机/etc/路径拷贝
docker cp 容器名:容器文件路径 /etc/
3.1、容器内部执行宿主机命令
# 使用如下命令构建容器
docker run -dit --pid=host --net=host --privileged --name test -h=test f635a6b2e0d2 /bin/bash
# 进入容器内部
docker exec -it test /bin/bash
# 容器内部使用nsenter命令运行,
# 如果没有安装utile-linux工具 
yum install -y util-linux
熟悉以下概念
Linux在不断的添加命名空间,目前有:
    mount:挂载命名空间,使进程有一个独立的挂载文件系统,始于Linux 2.4.19
    ipc:ipc命名空间,使进程有一个独立的ipc,包括消息队列,共享内存和信号量,始于Linux 2.6.19
    uts:uts命名空间,使进程有一个独立的hostname和domainname,始于Linux 2.6.19
    net:network命令空间,使进程有一个独立的网络栈,始于Linux 2.6.24
    pid:pid命名空间,使进程有一个独立的pid空间,始于Linux 2.6.24
    user:user命名空间,是进程有一个独立的user空间,始于Linux 2.6.23,结束于Linux 3.8
    cgroup:cgroup命名空间,使进程有一个独立的cgroup控制组,始于Linux 4.6
nsenter允许用户通过一个进程命名空间进入另一个进程命名空间
nsenter -m -u -i -n -p -t 1 sh -c "docker ps"
-m 挂载命名空间
-u user命名空间,是进程有一个独立的user空间
-i ipc命名空间,使进程有一个独立的ipc
-n network命令空间,使进程有一个独立的网络栈
-p pid命名空间,使进程有一个独立的pid空间
-t 1 指定我们想要进入的进程的PID。在这里,它是1。PID为1的进程通常是init进程,它是每个Linux系统上的第一个进程,也是所有其他进程的父进程。在容器中,这个init进程实际上是容器的入口点,它负责管理容器中的其他进程。

所以,当你运行这个命令时,你实际上是在容器中进入了init进程的命名空间,并在这个命名空间中执行了docker ps命令。由于容器和宿主机共享相同的网络和mount命名空间(因为我们使用了-n和-m选项),所以这个命令实际上是在宿主机上执行,而不是在容器内部。

简而言之,这个命令之所以可以执行宿主机上的命令,是因为它利用了命名空间的特性,特别是通过进入init进程的命名空间来做到这一点。而-t 1则是用来指定我们要进入哪个进程的命名空间。
sh -c "docker ps" 代表把后续字符串叫给sh脚本运行

4、docker-compose

docker-compose是一个工具,用于管理docker容器的工具,构建容器之间的关联关系,配合yml文件进行使用
所以要先熟悉yml文件格式如何编写,举例如下

# 版本号
version: '3'
# docker容器服务		
services:
  # 服务名,唯一
  nginx:
  	# 该容器对应的镜像名	
    image: quay.io/nginx:19.0.3
    # 容器名称		
    container_name: nginx
    # 启动用户
    user: root
    # 重启配置
    restart: always			
    # 设置容器内部环境变量											
    environment:
      - KEYCLOAK_ADMIN=test
      - KEYCLOAK_ADMIN_PASSWORD=123
    # 网络模式-host模式
    network_mode: "host"
    command: ["start-dev"]
    # 容器目录映射到宿主机的路径								
    volumes:
      - /var/nginx:/opt/data/

  portal:
    image: ubuntu:v1
    container_name: ubuntu
    user: root
    restart: always
    # 依赖项,此容器依赖于nginx容器
    depends_on:
      - nginx

    network_mode: "host"
# docker-compose安装
yum install docker-compose
# 启动运行命令,不跟容器名是启动所有
docker-compose -f run.yml up -d
-f 指定的yml文件,不指定默认docker-compose.yml
up 启动
-d 后台启动
# 查看运行容器
docker-compose -f run.yml ps
# 查看运行日志
docker-compose -f run.yml logs 容器id
# 停止某一容器
docker-conpose -f run.yml stop 容器名

5、Dockerfile

dockerfile是一个构建镜像的文件,文件内容有一定标准格式
举例如下:
vim Dockerfile 编写如下内容

# 基础镜像,可以是docker源,也可以是本地镜像
FROM python:3.6.8-slim

# 设置工作目录
WORKDIR /app

# 安装依赖和构建工具
RUN apt-get update 

# 复制应用程序代码到工作目录
COPY ./project /project
COPY ./html /usr/share/nginx/html 

# 配置uWSGI
RUN mkdir -p /etc/uwsgi && mkdir -p /app/project/log
COPY ./project/uwsgi.ini /etc/uwsgi/uwsgi.ini

# 配置Nginx
COPY ./project/package/soft/nginx.conf /etc/nginx/nginx.conf
COPY ./project/package/soft/portal_static.conf /etc/nginx/conf.d/portal_static.conf

# 暴露端口
EXPOSE 80 22 23
# 启动uWSGI和Nginx
CMD ["sh", "-c", "uwsgi --ini /etc/uwsgi/uwsgi.ini && nginx -g 'daemon off;'"]

# 切换到Dockerfile所在的目录,执行如下build命令
docker build -t test:v1 ./
  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值