官方中文文档
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的情况下使用
基础镜像拉取
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 # 更改镜像标签
交互式容器
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
基于容器的镜像制作
启动基础镜像容器
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
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‘ ./
原文:https://www.cnblogs.com/nuochengze/p/13401622.html