Docker入门_docker,containner

可以粗糙的认为是一个轻量级的虚拟机,因为在某种程度上来讲,docker和虚拟机是有非常多的相似点。它们都是讲应用放在相对独立的环境里,调度主机的内核来运行。但Docker确实不是虚拟机,这张图是虚拟机和Docker的对比图,左边这张图是虚拟机,右边是Docker,左边的虚拟机子宿主机上有一层Hypervisor虚拟层,虚拟出了硬件和设备,在虚拟层上面会安装GuestOs,然后再运行各种各样的程序,docker 是不一样的,docker是不一样的,它在宿主机上有一个Docker engine,然后再运行各种各样的应用程序。因为它没有虚拟机层,它会比虚拟机轻量很多,包括程序运行速度也非常的快。

Docker为何这么火?天时地利人和。Docker 不是什么新技术,Docker的镜像版本管理是其火的根本原因。

Docker安装

Centos安装:

安装:
yum search docker
yum -y install docker-io

查看基本信息:docker info 
启动:servie start docker

Docker架构

在这里插入图片描述

从这张图可以看出,Docker的架构是非常简答的。中间是Host,上面装了一个Docker daemon的守护进程,守护进程应用做很多docker的操作,那么谁让 docker daemon来做这些操作呢,是最左边client,比如我们再终端操作输入dokcer的命令,客户端讲命令发送给docker守护进程,让docker去做一些操作,比如从最右边的镜像仓库拉取镜像到宿主机上,然后在宿主机上跑镜像,运行容器。

常见的Docker命令
docker run -p 80:80 -d  docker.io/nginx
docker cp index.html containerId://usr/share/nginx/html
docker exec -it containeId /bin/bash
docker images
docker ps [-a -q]
docker stop containerId
docker rm containerId
docker rmi imagesId

docker commit –m ’msg’ containerId [name] 
docker build
docker pull
docker push
docker login

Dockerfile
常用命令
命令用途
WORKDIRRUN ENTRYPINT CMD执行的工作目录
ENV添加环境变量
ADD添加文件,会解压压缩包
COPY复制文件
ONBUILD触发器
VOLUME挂载卷
FROM基础镜像
ENTRYPOINT基础命令
RUN执行命令
CMD启动程序命令,拼接在基础命令后
EXPOSE暴露端口
MAINTAINER维护者

如果不理解可以参考博客https://www.cnblogs.com/51kata/category/789766.html

第一个Dockerfile
FROM alpine:latest
MAINTAINER fzp
CMD echo 'hello docker'

这个镜像的基础镜像是alpine:latest,所有者是fzp,容器启动的时候会执行echo命令。

执行:

docker build -t hello-img .

docker run hello-img

控制台输出: hello docker

第二个Dockerfile
FROM ubuntu
MAINTAINER fzp
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN apt-get update 
RUN apt-get install -y nginx
COPY index.html /var/www/html
ENTRYPOINT ["/usr/sbin/nginx","-g","daemon off;"]
EXPOSE 80

这个镜像稍微复杂点,基础镜像是ubuntu,镜像所属者fzp,再一下一层是设置镜像加速的地址。将index.html拷贝到镜像的目录下。最后以前台进程的形式启动。

index.html

today i'm happy

执行命令:

docker build -t forezp/hello.nginx .

docker run forezp/hello.nginx

curl localhost

控制台输出:today i’m happy

Docker存储

独立于容器之后的独立化存储

第一种方式:

docker run -p 80:80 -d -v $PWD/code:/var/www/html nginx

-v指令 宿主的路径:容器路径

将容器的路径的文件夹或者文件挂载到宿主机的路径。

第二种方式:

docker run -volumes-from …

docker create -v $PWD/data:/var/mydata --name data_container ubuntu

docker run -it --volumes-from data_container ubuntu /bin/bash

cd /var/mydata

touch what.txt

exit 

cd data

ls

可以查看宿主机的data目录有what.txt文件

镜像仓库

Regiestry,使用官方的docker hub。

docker search whalesay

docker pull dokcer/whalesay

docker run dokcer/whalesay cowsay docker is fun

docker tag dokcer/whalesay forezp/whalesay

dcoker push forezp/whalesay

docker login

Docker Compose

docker compose是Docker 官方的一个容器编排工具,现在以一个简单的搭建博客的例子来讲解。

安装

所以的例子都是在linux系统下完成的,docker compose在linux下的安装:

curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod a+x /usr/local/bin/docker-compose

验证安装成了没:

docker-compose --version

Docker Compse常用命令
  • docker-compose build
  • docker-compose up
  • docker-compose stop
  • docker-compose rm
案例实战

工程架构:

WX20180903-233019@2x.png

分为3个容器,最外层一个服务为ngixn,下一层服务为ghost app,最底层容器是Mysql

在工作目录ghost下,有三个文件夹分别为ngix、ghost、db和一个docker-compose.yml文件,目录结构为:

-ghost
 - nginx
     - Dockerfile
     - nginx.conf
 - ghost
   - Dockerfile
     - config.js
 - db
 - docker-compose.yml

docker-compose.yml编写

version: '2'
networks:
  ghost:
services:
  ghost-app:
    build: ghost
    networks:
      - ghost
    depends_on:
      - db
    ports:
      - "2368:2368"
  nginx:
     build: nginx
     networks:
      - ghost
     depends_on:
      - ghost-app
     ports:
      - "80:80"
  db:
    image: "mysql:5.7.15"
    networks:
      - ghost
    environment:
      MYSQL_ROOT_PASSWORD: mysqlroot
      MYSQL_USER: ghost
      MYSQL_PASSWORD: ghost
    volumes:
      - $PWD/data:/var/lib/mysql
    ports:
      - "3306:3306"

nginx相关

dockerfile编写:

FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80

配置文件文件编写nginx.conf

worker_processes 4;
events {
        worker_connections 1024;
        }
http {
    server {
       listen 80;
       location / {
             proxy_pass http://ghost-app:2368;


![img](https://img-blog.csdnimg.cn/img_convert/baa7654173b22dfe60bd9fab0414e395.png)
![img](https://img-blog.csdnimg.cn/img_convert/9995c163c4ab2a6fbd8ba4e85f138ac2.png)
![img](https://img-blog.csdnimg.cn/img_convert/06b05f182ef1de9c4f927598cb3d8da3.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

4;
events {
        worker_connections 1024;
        }
http {
    server {
       listen 80;
       location / {
             proxy_pass http://ghost-app:2368;


[外链图片转存中...(img-Kwa6OvMm-1719212434000)]
[外链图片转存中...(img-JuAHp08T-1719212434001)]
[外链图片转存中...(img-ZPlMVeN5-1719212434001)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!**

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值