文章目录

  • 1. Docker简介及安装
  • 1.1 基本概念
  • 1.2 与虚拟机比较
  • 1.3 安装Docker仓库
  • 1.4 安装Docker引擎
  • 1.5 mac下安装
  • 2. docker引擎管理
  • 3. docker镜像管理
  • 4. docker网络管理
  • 4.1 四种网络模式
  • 4.2 常用网络命令
  • 5. docker容器管理
  • 6. 端口映射和文件挂载
  • 6.1 端口映射
  • 6.2 文件挂载
  • 7. 容器互联
  • 7.1 容器互联机制
  • 7.1 网络互联
  • 8. 容器部署
  • 8.1 安装mysql
  • 8.2 安装jenkins


1. Docker简介及安装

1.1 基本概念

  • Docker:开源应用容器引擎,使用go语言,遵顼Apache 2.0协议
  • 容器:使用沙箱机制,相互之间不提供任何接口,且开窍极低
  • 镜像:通过镜像创建容器,类似操作系统镜像
  • 仓库:镜像的集中存放地

1.2 与虚拟机比较

特性

虚拟机

容器

隔离级别

内核级别

进程级别

隔离策略

Hypervisor

GGroups

系统资源

5-15%

0-5%

启动时间

分钟级

秒级

镜像存储

GB-TB

KB-MB

集群规模

上百

上万

高可用策略

备份/容灾/迁移

弹性/负载/动态

1.3 安装Docker仓库

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。

# 安装相关系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 更新yum缓存
sudo yum makecache fast

1.4 安装Docker引擎

  • 安装最新版本
# 默认安装最新社区版的Docker引擎和容器
sudo yum install docker-ce docker-ce-cli containerd.io
  • 安装特定版本
# 列出并排序您存储库中可用的版本(按版本号从高到低排序)
yum list docker-ce --showduplicates | sort -r

# 安装特定版本
sudo yum install docker-ce-18.09.1 docker-ce-cli-18.09.1 containerd.io

1.5 mac下安装

  • 安装docker
# 使用 Homebrew Cask 来安装Docker for Mac
brew cask install docker

# 查看版本
docker -v
  • 安装docker-machine
base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/usr/local/bin/docker-machine &&
  chmod +x /usr/local/bin/docker-machine

# 测试
docker-machine version
  • 配置镜像加速
# Docker Engine写入json格式配置
{
  "registry-mirrors": [
    "http://hub-mirror.c.163.com/",
    "https://registry.docker-cn.com"
  ],
  "insecure-registries":[],
  "experimental": false,
  "debug": true
}

2. docker引擎管理

# 查看docker引擎状态
systemctl status docker

# 停止docker引擎
systemctl stop docker

# 启动docker引擎
systemctl start docker

# 备注:必须才docker引擎运行的状态下才可以进行容器和镜像管理

3. docker镜像管理

  • 镜像管理
# 镜像搜索
docker search image_name

# 搜索官方镜像
docker search --filter "is-official=true" image_name
# 是否自动化构建
docker search --filter "is-automated=true" image_name
# 大于多少颗星
docker search --filter stars=3 image_name

# 下载镜像
docker pull image_name
    eg:docker pull centos:version

# 镜像查看
docker images
# 具体镜像查看
docker images image_name

# 镜像删除
docker rmi image_name

# 制作镜像
docker commit -a "author" -m "message" container_name/container_id new_image_name:tag_name
    -a:指定镜像作者
    -m:提交信息
    container_name/container_id:待制作镜像的容器
    new_image_name:新镜像名称
    tag_name:镜像标签,如latest
  • 镜像加速
# 配置
vim /etc/docker/daemon.json

# daemon.json 
{
  "registry-mirrors":["https://reg-mirror.qiniu.com/"]
}

# 重新启动服务
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看加速器是否生效
docker info

4. docker网络管理

4.1 四种网络模式

Docker网络模式

配置

说明

bridge模式

–net=bridge

最为常用的模式,可理解为虚拟交换机(默认为该模式)

host模式

–net=host

容器和宿主机共享Network namespace

container模式

–net=container:NAME_or_ID

容器和另外一个容器共享Network namespace。 kubernetes中的pod就是多个容器共享一个Network namespace

none模式

–net=none

容器有独立的Network namespace,但并没有对其进行任何网络设置,如分配veth pair 和网桥连接,配置IP等

  • docker0–可理解为路由器

ip a:查看宿主机网络

dh2100镜像 e01镜像和dd镜像区别_mysql


docker inspect docker_name: 查看容器内部的ip地址

dh2100镜像 e01镜像和dd镜像区别_nginx_02

  • 参考文档


4.2 常用网络命令

# 查看网络列表
docker network ls

# 查看命令
docker network --help

# 创建
docker network create (-d bridge/none) demo

# 查看网络信息
docker network inspect demo

# 删除
docker network rm demo

# 使用网络
docker run --net /bridge/host/none jenkins

# 连接网络(同一个容器可以加入到多个bridge网络中)
docker network connect 网络名 容器名

# 断开网络
docker network disconnect 网络名 容器名

5. docker容器管理

# 创建容器
docker run -itd --name container_name image_name
    -i:表以交互式模式运行
    -d:表后台运行,并返回容器id
    -t:为容器分配一个伪输入终端
    --name:为容器指定名称

# 查看正在运行的容器
docker ps
# 查看所有容器
docker ps -a
# 查看最近一次创建的容器
docker ps -l

# 启动容器
docker start container_name/container_id

# 停止容器
docker stop container_name/container_id
# 停止所有
docker stop $(docker ps -aq)

# 重启容器
docker restart container_name/container_id

# 删除容器
docker rm container_name/container_id
# 删除所有容器
docker rm $(docker ps -aq)

# 进入容器
docker exec -it container_name/container_id /bin/bash
# 退出容器
exit

6. 端口映射和文件挂载

6.1 端口映射

# -p 需指定端口 
docker run -itd --name container_name -p 宿主机端口号:容器端口号 image_name
    eg:docker run -itd --name nginx -p 8888:80 nginx

#  -P 随机指定>1024的端口
docker run -itd --name container_name -P image_name
    eg:docker run -itd --name nginx -P nginx

6.2 文件挂载

  • 目录挂载
docker run -itd --name container_name -p 宿主机端口号:容器端口号 -v 宿主机/文件目录:容器名/文件目录 image_name
    eg:docker run -itd --name nginx -p 8888:80 -v  /usr/local/zy/web01.html:/usr/share/nginx/html/index.html nginx
    
    注:docker中的root只是相当于普通用户
    Docker宿主机文件修改但容器内未修改解决办法:1、重启;2、http://ju.outofmemory.cn/entry/289286
  • 卷挂载
# 创建卷
docker volume create nginx_data

# 查看
docker volume inspect nginx_data

# 挂载
docker run -v nginx_data:/usr/share/nginx/html nginx

# 删除
docker volume rm nginx_data
  • 文件复制
# 容器-->宿主机
docker cp 容器名:目录/文件(夹)    宿主机目录/文件(夹)
# 宿主机-->容器
docker cp :宿主机目录/文件(夹)   容器名:目录/文件(夹)

7. 容器互联

7.1 容器互联机制

一个Docker容器一般仅运行一个服务。容器互联大体有以下三种方式,使用link进行容器互联:

  • 基于volume的互联;
  • 基于link的互联;
  • 基于网络的互联。使用–link参数让容器间进行交互:

7.1 网络互联

## 创建数据库容器
docker run -d --name mysqldb -p3306:3306 -e MYSQL_ROOT_PASSWORD=fanshine mysql/mysql-server

## 创建web容器,并连接到db容器
## --link参数格式为--link name:alias,其中name是要链接的容器名称,alias是这个连接的名称
docker run -d -p 80:80 --name nginxweb --link mysqldb:mysqldb nginx/nginx-server

8. 容器部署

8.1 安装mysql

# 拉取镜像
docker pull mysql

# 创建挂在目录
mkdir -p /var/cnmp/

# 创建容器
cd /var/cnmp/

docker run -itd \
    -p 3306:3306 \
    --name mysql \
    -v $PWD/mysql/conf:/etc/mysql/conf.d \
    -v $PWD/mysql/logs:/var/logs \
    -v $PWD/mysql/data:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=Zy112233 \
    -e TZ=Asia/Shanghai \
    --privileged=true mysql:5.7.31


# 进入容器
docker exec -it mysql /bin/bash

# 进入数据库
mysql -uroot -pZy112233

# 使用数据库
show databases;
# 创建
create database if not exists django1  default charset utf8 COLLATE utf8_general_ci;

# 使用use db01;
create table t_book(id int not null primary key, bookName varchar(20));
insert into t_book values(1, 'java');
select * from t_book;

# mysql8 连接
use mysql;
select user,host from user;

##更改加密方式
ALTER USER 'root'@'%' IDENTIFIED BY 'Zy112233' PASSWORD EXPIRE NEVER;
##更改密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Zy112233';
##刷新权限`
FLUSH PRIVILEGES;

8.2 安装jenkins

  • 阿里云
# 拉取官方镜像
docker pull jenkins

# 运行docker-jenkins
docker run -itd --name jenkins -p 8080:8080  -v /var/jenkins jenkins:2.60.3

# 开放阿里云端口
登陆---控制台---云服务ESC---实例id---本实例安全组---配置规则---添加安全组规则

# 密码存放位置
docker exec -it jenkins /bin/bash

# 查看密码
cat /var/jenkins_home/secrets/initialAdminPassword
  • 腾讯云
docker run \
  -u root \
  -dit \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /var/jenkins-data:/var/jenkins_home \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkinsci/blueocean

# 参考文档
https://cloud.tencent.com/developer/article/2008287