安装docker要求Linux系统的内核版本高于 3.10:
[root@sk-server ~]# uname -r
3.10.0-693.21.1.el7.x86_64
安装启动
# 安装前更新以下系统
# CentOS:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum update -y
yum install docker-ce
# Ubuntu:
apt-get update && apt-get upgrade
apt install docker.io
# Ubuntu 和 CentOS 都可以使用的安装方法:
wget -qO- https://get.docker.com/ | sh
# 配置一些系统参数:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
启动和关闭服务:
systemctl start docker # 启动
systemctl enable docker # 开机启动
非 root 用户需要加入 docker 用户组,以后操作不需要加 sudo:
sudo groupadd docker
sudo gpasswd -aG ${USER} docker
systemctl docker restart
# 退出系统重新登录生效
常用操作命令
docker info # 查看docker信息
docker ps --help #
可以通过命令docker command --help
更深入的了解指定的 Docker 命令使用方法 # 搜素镜像
docker search centos
docker search ubuntu
...
docker pull ubuntu # 拉取镜像
docker load -i /root/centos-laster-docker-image.tar # 导入本地镜像
docker images # 查看镜像
docker rmi ubuntu:latest # 删除镜像
docker rmi -f ubuntu:latest # 强制删除
#
运行docker容器 docker run -it ubuntu:latest /bin/bash #
-i 交互式,-t 为容器分配一个伪终端
# 退出 docker 容器
exit
#
后台运行容器 docker run -d ubuntu:latest bash -c "ls" # -d
后台运行容器,返回容器ID;-c
后面跟待完成的命令
docker logs 容器name/id # 读取后台运行容器的日志
# 查看运行的容器
docker ps
docker ps -l
docker ps -a # 查看所有
# 进入后台已经运行的容器
# 退出容器并保持运行状态,按:Ctrl + P + Q
docker attach <容器实例name/id>
docker exec -it <容器实例name/id> env LANG=en_US.utf8 /bin/bash # 推荐
# docker中获取root权限安装软件包
docker exec -it -u root b61615b0d9 pip3 install --user cx_Oracle
# 结束容器
docker kill 容器ID/名
# 启动,停止
docker stop 容器ID/名
docker start 容器ID
# 批量停止所有容器实例
docker stop $(docker ps -a -q)
# 删除容器
docker rm 容器ID/名
# 重命名容器
docker rename mystifying_chandrasekhar sk-test
# 查看 docker 容器资源占用情况
docker stats --no-stream
Docker 挂载本地目录及实现文件共享:
启动一个 centos 容器,宿主机的/test
目录挂载到容器的/soft
目录
docker run -it -v /test:/soft centos:latest env LANG=en_US.utf8 bash
docker 端口映射:
docker run -d -p 80:80 centos:nginx /bin/bash -c "/etc/init.d/nginx start"
-p物理机80端口 : 容器的80端口
,把容器的 80 端口映射到物理机的 80 端口上。
Docker 占用的磁盘空间清理:
docker system df # 查看Docker的磁盘使用情况 docker system prune # 清理磁盘,删除关闭的容器、无用的数据卷和网络 docker system prune -a # 清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉。
使用镜像仓库:
docker login --username=376765750@qq.com registry.cn-shenzhen.aliyuncs.com # 登录
docker push registry.cn-shenzhen.aliyuncs.com/skml/nginx:v1.16 # 上传本地镜像到远程仓库
docker logout registry.cn-shenzhen.aliyuncs.com # 登出
制作镜像
commit方式:
docker commit -m="has update" -a="sk" e218edb10161 data/ubuntu:v2
各个参数说明:
-m
提交的描述信息-a
指定镜像作者e218edb10161
容器IDdata/ubuntu:v2
指定要创建的目标镜像名
docker build 构建镜像:
cat dockerfile
FROM docker.io/ubuntu:latest # 基于哪个镜像
MAINTAINER sk "sk@1987.name" # 镜像作者
RUN yum install nginx # 执行命令
RUN ...
ADD start.sh /usr/local/bin/start.sh # 宿主机文件添加到容器
EXPOSE 80 # 输出端口
EXPOSE 443
CMD nginx # 容器启动之后运行的程序
docker build -t 1987.name/ubuntu:nginx .
参数说明:
-t
指定要创建的目标镜像名。.
dockerfile文件所在目录,可以指定dockerfile的绝对路径。
给镜像添加一个新的标签:
docker tag cd6d8154f1e1 ubuntu:app
导出镜像到本地:
docker save -o ubuntu-app-server.tar ubuntu:app
# 导出镜像名:ubuntu-app-server.tar
# 本地镜像名:ubuntu
# 镜像标签:app
dockerfile 指令参考
命令 | 说明 | 语法 |
---|---|---|
FROM | 指定基础镜像,必须是第一条指令 | FROM <image> FROM <image>:<tag> FROM <image>:<digest> |
RUN | 构建容器时运行的shell命令,多条连续命令使用 换行 | RUN <command> RUN [“executable”, “param1”, “param2”] |
CMD | 容器启动时要运行的命令 | CMD [“executable”,”param1″,”param2″] CMD [“param1″,”param2”] CMD command param1 param2 |
MAINTAINER | 指定作者 | MAINTAINER <name> |
EXPOSE | 暴露容器运行时的监听端口给外部,容器启动时需加 -p 参数和主机建立映射关系 | EXPOSE <port> |
ENV | 设置环境变量 | ENV <key> <value> ENV <key>=<value> |
ADD | 把文件复制到镜像中,源文件可以是网址 | ADD <src>… <dest> ADD [“”,… “”] |
COPY | 复制文件到镜像,源文件只能是本地文件 | COPY <src>… <dest> |
ENTRYPOINT | 启动时的默认命令 | ENTRYPOINT [“executable”, “param1”, “param2”] ENTRYPOINT command param1 param2 |
VOLUME | 主机目录挂载到容器中 | VOLUME [“/var/log/”] VOLUME /var/log VOLUME /var/log /var/db |
USER | 设置启动容器的用户 | USER daemo USER UID |
WORKDIR | 设置工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效,如果不存在则会创建 | WORKDIR /a/b/c |
ARG | 设置变量命令 | ARG <name>[=] |
ONBUILD | 只对当前镜像的子镜像生效 | ONBUILD [INSTRUCTION] |
STOPSIGNAL | 当容器推出时给系统发送什么样的指令 | STOPSIGNAL signal |
HEALTHCHECK | 容器健康状况检查命令 | HEALTHCHECK [OPTIONS] CMD command HEALTHCHECK NONE |
THE END
暂无评论内容