Docker学习

环境

  • CentOs7

安装Docker

  • 卸载安装过的Docker

yum -y remove docker*
sudo rm -rf /var/lib/docker (删除所有的镜像、容器、数据卷、配置文件等)
yum list installed | grep docker

例如:
协助已安装

  • 具体安装

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 (set up repository)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(use aliyun docker)
sudo yum install docker-ce(默认安装)

例如:
set up repository
install

  • 检查安装

docker version

例如:

version

基本操作

  • 运行第一个容器

docker run hello-world

例如:
hello-world
运行:

docker run -it ubuntu /bin/bash

参数说明:

  • -i:交互式操作
  • -t:终端
  • ubuntu:镜像
  • /bin/bash:命令

例如:
run docker

  • 查看本地镜像库

docker images

例如:
docker images

  • 查看帮助

docker --help

例如:
help

  • 显示运行中容器

docker ps

例如:
ps

  • 显示所有容器(包含已经中止的)

docker ps -a

例如:
ps -a

  • 继续运行容器并进入

docker restart [name]
docker attach [name]

例如:
restart and attach

  • 拉取镜像(以MySQL为例)

docker pull mysql:5.7

例如:
pull iamge

dockfile

解释
  • Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
  • Dockerfile是一个包含用于组合映像的命令的文本文档,可以使用在命令行中调用任何命令。
  • Docker通过读取Dockerfile中的指令自动生成映像。
  • docker build命令用于从Dockerfile构建映像,可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。
    例:docker build -f /path/Dockerfile
基本结构

四部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令
    结构比喻
常用指令
  • FROM
    指定基础镜像且必须为第一个命令

FROM <image>:<tag>

  • MAINTAINER
    指维护者信息

MAINTAINER <name>

  • RUN
    指构建镜像时执行的命令

RUN <command>

  • ADD
    指拷贝文件或目录到镜像,可以访问网络资源,tar自动解压

ADD <src>… <dest>

  • COPY
    指拷贝文件或目录到镜像,不会自动解压文件,也不能访问网络资源

COPY <src>… <dest>

  • EXPOSE
    指声明容器运行的服务端口

EXPOSE <端口号>

  • ENV
    指设置容器内环境变量

ENV <key>=<value>

  • CMD
    指运行容器时执行的Shell命令

CMD ["executable","param1","param2"]

  • ENTRYPOINT
    指运行容器时执行的Shell命令

ENTRYPOINT ["executable", "param1", "param2"]

  • VOLUME
    指定容器挂载点到宿主机自动生成的目录或其他容器

VOLUME ["/path/dir"]

  • WORKDIR
    指工作目录

WORKDIR /path/workdir

  • USER
    指定运行容器时的用户名或 UID

USER user

  • ARG
    指定传递给构建运行时的变量

ARG <name>[=<default value>]

构建Docker练习

  • 创建文件夹

mkdir mydocker
cd mydocker

例如:
create dir

  • 创建以及书写dockerfile文件

vim dockfile

例如:
create dockerfile

  • 构建镜像

docker build . -t hello

例如:
build
-运行镜像

docker run -it --rm hello -H

例如:
run build docker

使用MySQL容器

  • 启动服务器

sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

例如:
server

  • 启动客户端

docker run -it --net host mysql:5.7 "sh"

例如:
client

  • 数据库文件存放

docker exec -it mysql2 bash

例如:
file

  • Dockerfile 的 VOLUME /var/lib/mysql 的含义

例如:
mysql
每次启动 mysql 容器,docker 创建一个文件卷挂载在容器内/var/lib/mysql位置,且存放在主机(host)的 /var/lib/docker/volumes/ 目录下。

  • 创建卷并挂载

docker rm $(docker ps -a -q) -f -v
docker volume create mydb
docker run --name mysql2 -e MYSQL_ROOT_PASSWORD=root -v mydb:/var/lib/mysql -d mysql:5.7

例如:
create and load

将自己定义的数据卷挂载在 /var/lib/mysql。

  • 启动客户端容器链接服务器

docker run --name myclient --link mysql2:mysql -it mysql:5.7 bash
mysql -hmysql -P3306 -uroot -proot

例如:
link
使用 --link 连接两个容器,在客户端容器内可以使用 mysql 这个别名访问服务器。

  • 挂载现有数据库

docker run -v "/path/data":/var/lib/mysql --user 1000:1000 --name mysql_name -e MYSQL_ROOT_PASSWORD=password -d mysql:tag

  • 修改容器配置

docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag

Docker compose

  • 安装

sudo curl -L "https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-uname -s-uname -m" > /usr/local/bin/docker-compose

例如:
compose

  • 编写yml
    vim yml
  • 启动服务

docker-compose -f stack.yml up
up

Docker 网络

  • 查看容器网络

docker network ls
docker net

类型:

  • Docker0 ——默认,桥接
  • bridge ——本机内网络
  • host ——主机网卡
  • overlay——跨主机网络
  • none
  • Custom——网络插件

Docker-Conpose为你的应用创建一个网络,Docker-Compose为每个Service创建一个容器,并加入到这个网络中,被网络中的其它容器访问和发现。此容器能够以容器名称作为hostname标识,被其它容器访问。

  • 备制支持 ifconfig 和 ping 命令的 ubuntu 容器

docker run --name unet -it --rm ubuntu bash
apt-get update
apt-get install net-tools
apt-get install iputils-ping -y
ifconfig
ping <your host ip>

install 后进行ifconfig 以及 ping ,如下:
ping

  • 制作

docker commit unet ubuntu:net

制作后,查看镜像结果如下:
images

  • 创建自定义网络

docker network create mynet

创建并查看:
creare net

  • 在两个窗口创建 u1,u2 容器网络

docker run --name u1 -it -p 8000:8000 --net mynet --rm ubuntu:net bash
docker run --name u2 --net mynet -it --rm ubuntu:net bash
docker network connect bridge u1
docker network disconnect mynet u1

连接并断开:
connect and dis

容器监控与日志

  • 检查docker状态

docker info
docker info --format {{.ServerVersion}}

info
version

  • 查看容器内进程

docker top
docker stats

top:
top
stats:
stats

  • 容器详细信息

docker inspect

例如:
inspect

  • 容器日志

docker logs <name/ID>

logs
便于调试以及分析!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值