本文介绍Docker的安装步骤,容器的使用,镜像构建和使用。用于记录Docker中所使用到的命令,方便查阅。
Docker使用相关文章:
《OVS+Docker实现TCP/IP详解中的实验环境》
https://blog.youkuaiyun.com/walkerkalr/article/details/86999131
Docker安装
- 安装方式1
- 添加Docker的APT仓库
sudo sh -c “echo deb https://apt.dockerproject.org/repo ubuntu-trusty main > /etc/apt/sources.list.d/docker.list”
其中的trusty为主机的ubuntu版本,可以用个lsb_release命令来获取
root@localhost:/home/chenzb# sudo lsb_release --codename | cut -f2
trusty
- 添加Docker仓库的GPG秘钥
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80
–recv-keys 58118E89F3A912897C070ADBF76221572C52609D
- 安装Docker
sudo apt-get update
sudo apt-get install docker-engine
- 确认Docker已经安装成功
sudo docker info
该命令返回所有容器和镜像的数量,使用的驱动、存储和基本配置信息
- 安装方式2
- 安装包,允许 apt 命令 HTTPS 访问 Docker 源。
$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- 添加 Docker 官方的 GPG
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 将 Docker 的源添加到 /etc/apt/sources.list
$ sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”
- 安装 Docker
$ sudo apt-get update
$ sudo apt-get install docker-ce
Docker守护进程
Docker的操作都是针对守护进程执行,如下为守护进程的启动,查看和停止操作
sudo status docker NAME/CONTAINERID
sudo start docker NAME/CONTAINERID
sudo stop docker NAME/CONTAINERID
容器
运行容器:
docker run -i -t ubuntu /bin/bash
-i标志容器中的STDIN是开启的
-t标志Docker要为创建的容器分配一个伪tty终端
ubuntu 代表镜像
/bin/bash代表启动容器后启动一个Bash shell
docker ps查看正在运行的容器
docker ps -a查看所有容器
docker create创建一个容器,但不运行
docker attach 辐照一个运行中的容器
docker logs 获取容器的日志
docker logs -f 跟踪容器的日志
docker top 获取容器中的进程
docker stats 统计信息(CPU、内存、网络I/O、存储I/O)
docker exec -d ***NAME touch /etc/new_config_file 在运行的容器内部运行进程
docker exec -it NAME/CONTAINERID /bin/bash 进入容器环境打开终端
docker run --restart=always --name 自启动容器
–restart=on-failure:5 最多尝试重启5
docker inspect获取更多信息
docker rm 删除容器
docker rm
'docker ps -a -q'
删除所有容器
- 绑定端口运行容器
docker run -d -p 8080:80 --name static_web2 chenzb/static_web nginx -g “daemon off;”
将容器的80端口绑定到8080
- 登录容器的shell窗口
PID=$(sudo docker inspect --format ‘{{.State.Pid}}’ ddc285062762)
sudo nsenter --target $PID --mount --uts --ipc --net --pid
- 其他Dockfile中的构建指令
CMD:指定一个容器启动时要运行的命令
ENTRYPOINT: docker run中的参数被传给ENTRYPOINT指令中指定的命令
WORKID 用来在容器内部设置一个目录,使后面的命令在这个目录下工作
ENV:用来在镜像构建中设置环境变量
USER:镜像以什么用户运行
VOLUME:用来向基于镜像创建的容器添加卷
ADD:用来将构建环境下的文件和目录复制到镜像中
COPY:和ADD类似,但不做文件的解压工作
LABEL:为镜像添加元数据
STOPSIGNAL:用来设置容器停止时发送设么系统调用信号给容器
ARG:docker build运行时传递给构建运行时的变量
ONBUILD:镜像触发器。当一个镜像被用在其他镜像的基础镜像时,该镜像中的触发器将会被执行
镜像
相关命令:
docker images 列出所有镜像docker run -t -i --name new_container ubuntu:12.04 /bin/bash 运行带标签的镜像
docker pull fedora:20 拉取fedora:20镜像
docker search puppet 查找镜像
docker search ***查找镜像
docker commit提交镜像
docker history 镜像ID; 查看镜像构建的步骤
docker port 容器ID/容器名称 端口;查看容器中的端口对应的端口
docker rmi 删除镜像
docker rmi
docker images -q
删除所有镜像curl http://192.168.112.134:5000/v2/_catalog 查看已上传的images,其中192.168.112.134:5000为镜像的私有仓库地址
- 上传镜像到本地仓库步骤
- 打tag
sudo docker tag f94a6764f693 192.168.112.134:5000/chenzb/static_web
- push
sudo docker push 192.168.112.134:5000/chenzb/static_web
- 构建镜像
- 创建Dockerfile
MAINTAINER chenzb "1017448255@qq.com"
RUN apt-get update && apt-get install -y nginx
RUN echo ‘Hi, i am in your container’ /usr/share/nginx/html/index.html
EXPOSE 80
- 执行docker build命令
执行结果:
root@localhost:/home/chenzb/static_web# docker build -t=“chenzb/static_web” .
Sending build context to Docker daemon 2.048kB
Step 1/5 : FROM ubuntu:14.04
14.04: Pulling from library/ubuntu
e53f134edff2: Pull complete
Digest:
sha256:17f216e8eb523740f5f93a297faf6a6dcb393e14fa911168b4e9df3c0b6ef28eStatus: Downloaded newer image for ubuntu:14.04
—> 5dbc3f318ea5 Step 2/5 : MAINTAINER chenzb "1017448255@qq.com"
—> Running in 67e482bb431a —> 0da25037ba56 Removing
intermediate container 67e482bb431aStep 3/5 : RUN apt-get update && apt-get install -y nginx
—> Running in 06630c37f8ab Ign http://archive.ubuntu.com trusty
InReleaseGet:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]
Processing triggers for sgml-base (1.26+nmu4ubuntu1) … —>
aff49b75aa98 Removing intermediate container db17bcf024e8 Step 4/5 :
RUN echo ‘Hi, i am in your container’/usr/share/nginx/html/index.html
—> Running in 5f35c5f689bd —> 3921a0895f30 Removing
intermediate container 5f35c5f689bdStep 5/5 : EXPOSE 80
—> Running in 98adcc57391c —> c7bfb499845f Removing
intermediate container 98adcc57391cSuccessfully built c7bfb499845f
Successfully tagged chenzb/static_web:latest
build命令通过-t制定新增镜像的仓库和名称,本例中仓库是chenzb,镜像是static_web。
.是告诉Docker到本地目录寻找Dockerfile文件。当执行Dockerfile失败时可以用前一个步骤返回的镜像ID来建立容器,继续运行下一步骤的命令进行调试。
- 不使用缓存构建
docker build --no-cache -t="***" . 不使用Dockerfile的构建缓存
- 基于构建缓存的Dockerfile模板
MAINTAINER chenzb "1017448255@qq.com"
ENV REFERSHED_AT 2019-01-29
RUN apt-get update && apt-get install -y nginx
RUN echo ‘Hi, i am in your container’ >/usr/share/nginx/html/index.html
EXPOSE 80
这里修改REFERSHED_AT可以是后面的指令都不缓存,又可以使之前的指令缓存。