1、Docker介绍
-
官方中文文档
http://www.dockerinfo.net/document
-
安装docker
sudo apt install docker.io
-
使用docker
-
方法一
以管理员权限,运行docker命令
-
方法二
sudo groupadd docker # 添加docker用户组 sudo gpasswd -a $USER docker # 将登录用户加入到docker用户组中 newgrp docker # 更新用户组 docker ps # 测试docker命令是否可以在不使用sudo的情况下使用
-
2、Docker使用
-
基础镜像拉取
docker search centos docker pull centos:6.9
-
镜像基础查看
docker image ls
标识镜像唯一性的方法: 1.REPOSITORY:TAG 2.IMAGE ID(sha256:64位的号码,默认只截取12位)
-
镜像详细信息查看
docker image ls --no-trunc # 查询更详细的镜像信息 docker image inspect ubuntu:latest # 查询单个镜像的详细信息 docker image ls -q # 只查看镜像ID
-
镜像的导入和导出
docker image save IMAGE_ID > filepath/ubuntu.tar # 导出镜像 docker image load -i filepath/ubuntu.tar
-
镜像的删除
docker image rm IMAGE_ID -f # -f 强制删除 docker image rm -f `docker image ls -q` # 删除所有的镜像
-
镜像标签的更改
docker image tag IMAGE_ID old/ubu:v1 # 更改镜像标签
3、容器的管理
-
交互式容器
docker container run -it IMAGE_ID # 交互式启动容器 docker container run -it --name="xxx" IMAGE_ID # 手动指定容器名 docker container run -it --name='xxx' IMAEG_ID --rm # 添加--rm参数,当退出时,自动删除容器
-
查看运行容器的状态
docker container ls # 查看运行的容器 docker container ls -a # 查看所有的容器,包括运行,不运行 # CONTAINER_ID 容器的唯一号码,自动生成 # NAMES 容器的名字,可以自动,也可以自行指定 # STATUS 容器运行的状态
-
守护式容器
docker run -d --name='xxx' nginx:1.14 # 启动守护式容器 docker container ls -a # 查看容器运行状态 docker container inspect NMAES # 查看容器的详细信息 docker container rm NAMES # 删除容器
-
容器的应用场景
-
交互式容器:工具类(开发、测试、临时性的任务)
docker container run -it --name='xxx' IMAEG_ID --rm # 添加--rm参数,当退出时,自动删除容器
-
守护式容器:网络服务
docker run -d -p 8080:80 --name='xxx' NAMES
-
-
容器的启动、关闭和连接
-
守护式
docker container stop NAMES docker container start NAMES
-
交互式
docker container stop NAMES docker container start -i NAMES
-
-
容器的连接方法
docker container attach NAMES # 进入后台运行的容器,原来有啥进程,就用啥进程 docker container exec -it NAMES /bin/bash # 开启子进程,进入容器,退出时不影响当前容器
-
容器的后台及前台运行
-
ctrl+P, Q 扔到后台运行
-
attach 调用到前台
-
启动死循环
-
让程序前台一直运行(夯在前台)
docker container ls -a --no-trunc
-
制作守护式容器时常用的方法
-
-
docker容器的网络访问
-
指定映射(docker会自动添加一条iptables规则来实现端口映射)
-p hostPort:containerPort -p ip:hostPort:containerPort -p ip::containerPort # (随机端口:32768-60999) -p hostPort:containerPort/udp # 默认是tcp -p 81:80 -p 443:443 # 一次映射多个端口 # docker container run -d -p 80 --name="NAME" REPOSITORY:TAG
-
随机映射
docker container run -d -p 80 --name="NAME" REPOSITORY:TAG
-
-
docker容器的其他管理
-
查看进程ID
docker ps -a -q
等价与docker container ls -a -q
docker top NAMES
等价于docker container top NAMES
-
查看日志
docker container logs NAMES
# 查看操作记录docker container logs -t NAMES
# 查看操作记录,带有时间戳docker container logs -tf NAMES
docker container logs -tf --tail 10 NAMES
# 查看最后10条记录
-
-
docker的数据卷实现持久化存储
-
手工交互数据
Usage: docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- docker container cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH Info: Copy files/folders between a container and the local filesystem
-
Volume实现宿主机和容器的数据共享(映射)
docker container run -d --name='n2' -p 80:80 -v /home/nuochengze/Desktop/test:/usr/share/nginx/html nginx # 所有的变更,只能在容器生命周期内生效 # 可以开启多个容器,同时挂载一个映射
-
查看容器的挂载路径
docker container inspect NAMES
-
容器作为数据卷,实现数据共享
作用: 在集中管理集群中,大批量的容器都需要挂载相同的多个数据卷容器时,可以采用数据卷容器进行统一管理
# 宿主机模拟数据目录 mkdir -p /opt/Volume/a touch /opt/Volume/a/a.txt # 启动数据卷容器 docker run -it --name='com_volumes' -v /opt/Volume/a:/opt/a centos:6.9 /bin/bash ctrl p q # 将交互容器,变成后台运行 # 使用数据卷容器 docker container run -d -p 8081:80 --volumes-from com_volumes --name 'n1' nginx docker container run -d -p 8082:80 --volumes-from com_volumes --name 'n2' nginx
-
4、docker镜像制作
-
基于容器的镜像制作
-
启动基础镜像容器
docker container -it --name='cs' centos
-
安装所需的软件包,并且启动测试
yum install openssh-server -y
/etc/init.d/sshd start
/etc/init.d/sshd stop
echo '12345' | passwd --stdin
-
镜像的制作
docker commit cs registedname/centos_sshd:v1
-
基于新镜像启动容器实现
docker container run -d --name='sshd_1' -p 2222:22 NAMES /usr/sbin/sshd -D
-
5、dockfile定制镜像
-
dockerfile的基本使用方式
-
创建dockfile文件夹
mkdir -p dockfile/centos_sshd/Dockerfile
-
编辑Dockerfile
vim Dockerfile
# centos6.9-SSHDv1.0 # FROM centos:6.9 FROM centos@2199b8eb8390 RUN yum install openssh-server -y RUN /etc/init.d/sshd start && /etc/init.d/sshd stop && echo '123456' | passwd root --stdin EXPOSE 22 CMD ['/usr/sbin/sshd', '-D'] # RUN 后面加基础的shell命令 # 将命令的逻辑理清楚后,全写到一行上,避免增加临时容器 # RUN可以写多行 # FROM 有两种语法 # - syntax: # 第一种 centos:6.9 # 第二种 centos@hashval 该hashval唯一定位该镜像 # RUN 有两种语法 # 第一种 基于shell的命令, 占大多数 # 第二种 针对非shell命令,等专用程序命令 ['mysqld', '--initialize-insecure', '--user=mysql', '...'] # COPY 从dockerfile所在目录,拷贝目标文件到容器的指定目录下 # 可以支持通配符 # 如果拷贝的是目录,只拷贝目录下的子文件和目录 # - syntax: COPY <src> <dest> # ADD 功能和COPY相似,比COPY命令多的功能是,可以自动解压.tar*的软件包到目标目录下 # 可以指定源文件为url地址 # - syntax: <src>... <dest> url <dest> # ENV 设定变量 # - syntax: ENV CODEDIR /var/www/html ENV DATADIR /data/mysql/data ADD bbs.tar.gz ${CODEDIR} VOLUME ['${CODEDIR}', '${DATADIR}'] # WORKDIR # VOLUME ['/var/www/html', '/data/mysql/data'] # ENTRYPOINT 可以在启动容器时,防止第一进程被手工输入的命令替换掉,防止容器秒起秒关 # EXPOSE 向外暴露的端口 # - syntax: # EXPOSE 22 # CMD 使用镜像启动容器时运行的命令 # -syntax: ['/usr/sbin/sshd', '-D']
-
构建dockerfile镜像
docker image build -t 'centos6.9-sshd:v1.0' ./
-