世界上只有一种英雄主义,就是看清生活的真相之后依然热爱生活!

Docker 常用操作笔记

2018-09-28
605次查阅
2019/8/5

安装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容器ID
  • data/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 .

参数说明:

  1. -t指定要创建的目标镜像名。
  2. .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

评论

想说点什么?