Docker 学习笔记

linux 的内核特性
namespace: 资源的隔离
cgroups: 资源的限制

##运行一个centos 的容器
docker run -i -t centos /bin/bash

docker 的设计目标:

提供简单的应用程序和打包工具
开发人员和运维人员职责逻辑分离
多环境保持一致性


###docker的基本组成

docker client
docker daemon
docker images
docker container
docker registry

###容器和虚拟机的对比

###docker 的应用场景

应用程序打包和发布
应用程序隔离
持续集成
部署微服务
快速搭建测试环境
提供PAAS 产品(平台即服务)

##docker 运行一个服务
docker pull nginx
docker run -it nginx
docker run --name mynginx -d nginx:latest
###docker 源 设置

[root@master01 ~]# cat /etc/docker/daemon.json
[root@master01 docker]# cat daemon.json
{"registry-mirrors":["https://c6ai9izk.mirror.aliyuncs.com","https://registry.docker-cn.com"],
     "data-root":"/data/docker",
     "log-driver":"json-file",
     "log-opts":{"max-size":"100m"},
     
     "storage-driver":"overlay2",
     "storage-opts": [ "overlay2.override_kernel_check=true"],
     "live-restore": true,  
     "exec-opts": [ "native.cgroupdriver=systemd" ]
 }
[root@master01 docker]#


镜像与容器的关系

镜像不是一个单一的文件,而是有多层构成。我们可以通过docker history 查看镜像中各层内容及大小。
每层对应着dockerfile 中的一条指令。
docker镜像默认存储在 /var/lib/docker/中

容器其实是在镜像的最上面加了一层读写层,在运行容器里面做的任何文件改动,都会写在这个读写层。
如果容器删除了,最上面的读写层也就删除了,改动也就丢失了。
docker 使用存储驱动管理镜像每层内容及可读写层的容器层。


###存储驱动
overlay2 性能最好
overlay
aufs
devicemapper
btrfs
zfs

###docker export 和docker image save 的区别


####创建容器
###创建一个容器并且后台形式运行,名字为bs

docker run -itd --name bs busybox
###进入容器

docker container attach bs
##启动一个容器
docker container start bs
###进入容器后,如果直接退出exit ,容器也会停止,如果不想停止, 用快捷键 ctrl+p+q
###创建一个容器 暴露8080端口对宿主机
docker container run -itd -p 8080:80 --name nginx01 nginx
###通过宿主机浏览器访问本机:8080 来访问nginx

可以通过logs 来查询访问情况
docker container logs -f nginx01

###另外宿主机上也能查找到日志存放的地方如下,用 容器的id 查找

/data/docker/containers/


### 设置容器重启策略 always
docker container run -itd --name nginx02 --restart=always nginx

#####docker container 限制资源使用
[root@master01 ~]# docker container run -itd --name nginx03 --memory 512m --memory-swap 1024m --cpus 4 nginx
6bb220db9d75ccea4065ef884531a7296fe641f54809b00a3cef751439148c65
[root@master01 ~]#
[root@master01 ~]#

###查看状态
[root@master01 ~]# docker container stats nginx03


####管理应用程序数据
第四章,管理应用程序数据
##Docker 主机数据挂载到容器

Docker 提供三种不同的方式将数据从宿主机上挂载到容器中:volumes ,bind mounts 和tmpfs

volumes:Docker 管理宿主机文件系统的一部分(/var/lib/docker/volumes)
bind mounts: 可以存储在宿主机系统的任意位置
tmpfs: 挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统


volumes
###创建一个卷 查看卷信息
[root@master01 ~]# docker volume ls
DRIVER              VOLUME NAME
[root@master01 ~]# docker volume create nginx-vol
nginx-vol
[root@master01 ~]# docker volume ls
DRIVER              VOLUME NAME
local               nginx-vol
[root@master01 ~]# docker volume inspect nginx-vol
[
    {
        "CreatedAt": "2019-10-22T13:50:34+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/data/docker/volumes/nginx-vol/_data",
        "Name": "nginx-vol",
        "Options": {},
        "Scope": "local"
    }
]

###将卷挂载到 容器中
[root@master01 ~]# docker container run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
82510a15dd2d6bda7d9e7e5f56d667793e962352f411cb3a7b23c26019ab1d38
###查看挂载 信息

[root@master01 ~]# ls /data/docker/volumes/nginx-vol/_data/
50x.html  index.html
[root@master01 ~]#
###删除所有容器
docker rm -f $(docker ps -q -a)
###多个容器可以一个数据卷,数据共享 提供2中挂载方式
docker container run -itd --name=nginx-test1 -p 81:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
docker container run -itd --name=nginx-test2 -p 82:80 --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
docker container run -itd --name=nginx-test3 -p 83:80 -v nginx-vol:/usr/share/nginx/html nginx

####挂载卷可以命名卷和匿名卷 ,如果不指定卷,就会自动创建一个匿名卷
#

###bind 方式挂载到容器里面,但是这种挂载会隐藏掉容器挂载目录下面的文件

docker container run -itd --name nginx02 -p 82:80 --mount src=,dst=/usr/share/nginx/html nginx
6880e01be1c3e65898810e04a6dc05cf5c5a21870304f72099ac3d5707d137ef
##查看卷挂载
docker volume ls
[root@master01 test_volumes]# docker volume ls
DRIVER              VOLUME NAME
local               7d7f748f13128d4639b5bcc3b166214a285eea51b60c90540f06a17cc9759654
local               nginx-vol


docker container run -itd --name nginx01 -p 81:80 --mount type=bind,src=/opt/test_volumes/,dst=/usr/share/nginx/html/ nginx
###查看挂载信息
docker container inspect nginx01  可以查看到一下信息


        "Mounts": [
            {
                "Type": "bind",
                "Source": "/opt/test_volumes",
                "Destination": "/usr/share/nginx/html",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }

 

###搭建lnmp 网站平台


###创建一个mysql 容器
1.自定义网络
[root@master01 ~]# docker network create lnmp
5376eaef475f958b2b149ccc3b03a4ae096cf58392836d766838851416074745
###查看network
docker network ls

2.创建mysql 数据库容器
docker container run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql --charac
ter-set-server=utf8
3.创建所需要的数据库
docker exec lnmp_mysql sh -c 'exec mysql -uroot -p123456 -e "create database wp"'
mysql: [Warning] Using a password on the command line interface can be insecure.
4.创建PHP环境容器
docker run -itd --name lnmp_web --net lnmp -p 88:80 --mount type=bind,src=/app/wwwroot/,dst=/var/www/html richarvey/nginx-php-fpm

5. 以wordpress 博客为内容

####第五章,网络管理
##网络模式
有bridge
默认网络,docker 启动后默认创建一个docker0 网桥,默认创建的容器也是添加到这网桥中。
host
容器不会获取一个独立的network namespace,而是与宿主机公用一个
none
获取独立的network namespace ,但不为容器进行任何网络配置
container
与指定的容器使用同一个network namespace ,网卡配置也是相同的
自定义
自定义网桥,默认与bridge 网络一样


###dockerfile  第六章

dockerfile 指令
build 镜像指令
构建php网站环境镜像
构建java网站环境镜像
####构建nginx 镜像
[root@master01 nginx]# cat Dockerfile
FROM centos:7
MAINTAINER www.abc.com
RUN yum install -y gcc gcc-gcc+ make openssl-devel pcre-devel
ADD nginx-1.12.1.tar.gz /tmp

RUN cd /tmp/nginx-1.12.1 && \
    ./configure --prefix=/usr/local/nginx && \
    make -j 2 && \
    make install

RUN rm -rf /tmp/nginx-1.12.1* && yum clean all

COPY nginx.conf /usr/local/nginx/conf

WORKDIR /usr/local/nginx

EXPOSE 80

CMD ["./sbin/nginx", "-g", "daemon off;"]


###构建php 镜像
[root@master01 php]# cat Dockerfile
FROM centos:7
MAINTAINER www.abc.com
RUN yum install -y gcc gcc-c++ make gd-devel libxml2-devel libcurl-devel libjpeg-devel libphp-devel openssl-devel
ADD php-5.6.31.tar.gz /tmp
RUN cd /tmp/php-5.6.31 && \
    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-mysql --with-mysqli \
    --with-openssl --with-zlib --with-curl --with-gd \
    --with-jpeg-dir --with-php-dir --with-iconv \
    --enable-fpm --enable-zip --enable-mbstring && \
    make -j 4 && \
    make install && \
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf && \
    sed -i "s/127.0.0.1/0.0.0.0/" /usr/local/php/etc/php-fpm.conf && \
    sed -i "21a \daemonize = no" /usr/local/php/etc/php-fpm.conf
COPY php.ini /usr/local/php/etc
RUN rm -rf /tmp/php-5.6.31* && yum clean all
WORKDIR /usr/local/php

docker build -t php:v1 . -f Dockerfile

####构建 java 镜像

FROM centos:7
MAINTAINER www.abc.com

ADD jdk-8u45-linux-x64.tar.gz /usr/local

ENV JAVA_HOME /usr/local/jdk1.8.0_45

ADD apache-tomcat-8.5.47.tar.gz /usr/local

COPY server.xml /usr/local/apache-tomcat-8.5.47/conf

RUN rm -f /usr/local/*.tar.gz

WORKDIR /usr/local/apache-tomcat-8.0.46

EXPOSE 8080

ENTRYPOINT ["./bin/catalina.sh", "run"]

docker build -t tomcat:v1 -f Dockerfile .

###创建一个容器


docker run -dit --name=tomcat -p 8082:8080 --mount type=bind,src=/app/webapps,dst=/usr/local/apache-tomcat-8.5.47/webapps tomcat:v1

####habor 设置

###https://github.com/goharbor/harbor


公开的harbor 仓库只有下载权限没有上传权限,
私有地址,有上传和下载权限

 

当谈到Docker学习笔记时,我可以为你提供一些基本的指导和主题,以帮助你开始学习Docker。以下是一些可能涵盖的主题: 1. Docker简介:了解Docker的基本概念、优势以及它如何与虚拟化技术不同。 2. Docker安装:学习如何在不同的操作系统上安装Docker,并熟悉Docker引擎的组成部分。 3. Docker镜像:了解Docker镜像的概念,以及如何通过构建、拉取和推送镜像来管理和共享容器环境。 4. Docker容器:学习如何创建、启动、停止和删除容器,并了解容器和主机之间的交互方式。 5. Docker网络:探索Docker网络模式,包括桥接网络、主机网络和覆盖网络,并理解容器之间以及容器与主机之间的通信方式。 6. Docker存储:了解Docker存储技术,包括数据卷和绑定挂载,并学习如何在容器中持久化数据。 7. Docker Compose:介绍Docker Compose工具,它可以用于定义和运行多个容器的应用程序。 8. Docker Swarm:探索Docker Swarm,它是Docker官方的容器编排和集群管理工具,于在多个主机上部署和管理容器应用。 9. Docker和持续集成/持续部署(CI/CD):了解如何将Docker与CI/CD工具(如Jenkins、GitLab CI等)集成,以简化应用程序的构建和部署过程。 这只是一些可能的主题,你可以根据自己的需求和兴趣来选择学习内容。希望这些指导可以帮助你开始学习Docker!如果你有任何特定的问题,我很乐意回答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

石兴稳

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值