docker介绍使用

1 介绍

  Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。

用户需要考虑虚拟化方法,尤其是硬件虚拟化方法,需要借助docker解决的主要是以下4个问题:

  • 隔离性 - 每个用户实例之间相互隔离, 互不影响。 硬件虚拟化方法给出的方法是VM, LXC给出的方法是container,更细一点是kernel namespace
  • 可配额/可度量 - 每个用户实例可以按需提供其计算资源,所使用的资源可以被计量。硬件虚拟化方法因为虚拟了CPU, memory可以方便实现, LXC则主要是利用cgroups来控制资源
  • 移动性 - 用户的实例可以很方便地复制、移动和重建。硬件虚拟化方法提供snapshot和image来实现,docker(主要)利用AUFS实现
  • 安全性 - 这个话题比较大,这里强调是host主机的角度尽量保护container。硬件虚拟化的方法因为虚拟化的水平比较高,用户进程都是在KVM等虚拟机容器中翻译运行的, 然而对于LXC, 用户的进程是lxc-start进程的子进程, 只是在Kernel的namespace中隔离的, 因此需要一些kernel的patch来保证用户的运行环境不会受到来自host主机的恶意入侵, dotcloud(主要是)利用kernel grsec patch解决的.

LXC所实现的隔离性主要是来自kernel的namespace, 其中pid, net, ipc, mnt, uts 等namespace将container的进程, 网络, 消息, 文件系统和hostname 隔离开。

2 docker使用

2.1. 安装docker (centos)

1)卸载旧版本docker

 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2)先安装docker仓库

// 安装yum-utils提供yum-config-manager工具
sudo yum install -y yum-utils
//配置仓库地址,这里配置阿里云镜像地址 sudo yum-config-manager \ --add-repo \
  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3)安装docker

# ce社区版 
sudo yum install docker-ce docker-ce-cli containerd.io

4)启动docker

 sudo systemctl start docker

5)运行hello world镜像

sudo docker run hello-world

6)配置阿里云镜像仓库

# 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://1ov2f3xx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

 

2.2. 使用docker容器运行应用

1. 启动一个容器运行镜像

docker run -d -p 80:80 docker/getting-started
  • -d - run the container in detached mode (in the background)
  • -p 80:80 - map port 80 of the host to port 80 in the container
  • docker/getting-started - the image to use,先从本地获取,如果本地没有则从远程拉取

2. 容器之间可能需要互相访问,如一个应用程序需要访问mysql数据库

1)创建一个桥接模式局域网

应用程序容器和数据库容器绑定到同一个局域网中

docker network create mynet

2)启动数据库容器

docker run -d \
    --network mynet --network-alias mysql \
    -v mysql-data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=secret \
    -e MYSQL_DATABASE=todos \
    mysql:5.7

-v:本地目录文件到容器文件映射。

3)登陆容器中的数据库

hebinhuadeMacBook-Pro:docker tency$ docker exec -it 99f2f430e885 mysql -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| todos              |
+--------------------+
5 rows in set (0.01 sec)

 

2.3 服务编排

1. 查看docker-compose版本

docker-compose version

2. 创建docker-compose.yml文件

1)确定compose-file版本跟docker引擎版本对应,查看:https://docs.docker.com/compose/compose-file/

version: "3.7"

  

2)编辑docker-compose.yml文件

version: "3.7"

services:
  app:
    image: node:12-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos

  mysql:
    image: mysql:5.7
    volumes:
      - todo-mysql-data:/var/lib/mysql
    environment: 
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: todos

volumes:
  todo-mysql-data:

3)启动应用容器命名docker-compose up

docker-compose up -d

  -d: 后台挂起

2. 查看编排镜像命令

docker image history docker/getting-started  

 

 

 

参考docker官网:https://docs.docker.com/

 

posted @ 2021-03-13 14:38  独特的数字  阅读(57)  评论(0)    收藏  举报