docker小结

容器和虚拟机

容器在Linux上本地运行,并与其他容器共享主机的内核。它运行一个离散进程,不占用任何其他可执行文件更多的内存,从而使其轻巧。

相比之下,虚拟机(VM)运行具有“ 虚拟机管理程序”对主机资源的虚拟访问权的成熟guest操作系统。通常,VM会产生大量开销,超出了应用程序逻辑所消耗的开销。

docker和虚拟机

安装docker

windows下安装docker

在Windows上安装Docker Desktop

下载Docker Desktop

需要注意的是:

运行Docker Desktop需要Microsoft Hyper-V。必要时,Docker桌面Windows安装程序会启用Hyper-V,然后重新启动计算机。启用Hyper-V后,VirtualBox不再起作用。但是,将保留所有现有的VirtualBox VM映像。

用docker-machine(包括default通常在Toolbox安装过程中创建的虚拟机)创建的VirtualBox VM 不再启动。这些VM不能与Docker Desktop并排使用。但是,您仍然可以 docker-machine用来管理远程VM。

安装Docker后VMware和VirtualBox无法启动 VT-x is not available

linux下安装docker

用yum源安装

查看是否已安装docker列表

yum list installed | grep docker

安装docker

yum -y install docker

启动docker

systemctl start docker

查看docker服务状态

systemctl status docker

配置 加速器

对于使用 upstart 的系统而言,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中
添加获得的加速器配置:

DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"

重新启动服务。

$ sudo service docker restart

对于使用 systemd 的系统,请在 /etc/docker/daemon.json 中写入如下内容(如果文件不存
在请新建该文件)

{
    "registry-mirrors": [
        "https://registry.docker-cn.com"
    ]
}

注意,一定要保证该文件符合 json 规范,否则 Docker 将不能启动。
之后重新启动服务。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker    

创建镜像

基于dockerfile创建镜像

编写docker file

dockerfile命令参考

# Use the official image as a parent image
FROM node:current-slim

# Set the working directory
WORKDIR /usr/src/app

# Copy the file from your host to your current location
COPY package.json .

# Run the command inside your image filesystem
RUN npm install

# Inform Docker that the container is listening on the specified port at runtime.
EXPOSE 8080

# Run the specified command within the container.
CMD [ "npm", "start" ]

# Copy the rest of your app's source code from your host to your image filesystem.
COPY . .    

dockerfile 命令

MAINTAINER

格式
MAINTAINER <name>
指定该dockerfilr文件的维护者信息。

RUN

格式:
RUN <command>                             (shell模式)
RUN["executable", "param1","param2"]      (exec模式)

表示当前镜像构建时候运行的命令,如果有确认输入的话,一定要在命令中添加 -v

如果命令较长,那么可以在命令结尾使用 \ 换行

shell模式:类似于 /bin/bash -c command

实例:RUN echo hello

exec模式:类似于 RUN["/bin/bash", "-c", "command"]

实例: RUN["echo", "hello"]

EXPOSE

格式:EXPOSE <port> [<port>...]

设置docker容器对外暴露的端口号,docker 为了安全,不会自动对外打开端口,如果需要外部提供访问,还需要启动容器时增加-p或者-P参数对容器的端口进行分配。

基于容器创建镜像

不要使用 docker commit 定制镜像,定制镜像应该使用 Dockerfile 来完成

docker commit :从容器创建一个新的镜像。

语法

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

  • a :提交的镜像作者;

  • c :使用Dockerfile指令来创建镜像;

  • m :提交时的说明文字;

  • p :在commit时,将容器暂停。

示例:

[root@JD ~]# docker ps -a |grep mysql
e718ed5b4e32        mysql:5.7                           "docker-entrypoint.s…"   3 weeks ago         Up 3 weeks                 0.0.0.0:3306->3306/tcp, 33060/tcp                                mysql
[root@JD ~]# docker commit -a "mujia_prince" -m "test docker commit mysql" e718ed5b4e32 my-test-mysql:v1.0
sha256:bb9c07f10ff04f0fa0f486afc07221110029e13ab3dd61bc495b7bd5ad93978f

[root@JD ~]# docker images -a
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
my-test-mysql                  v1.0                bb9c07f10ff0        41 seconds ago      437MB
mysql                          5.7                 db39680b63ac        3 months ago        437MB

搭建镜像仓库

搭建docker镜像仓库

docker volumes

docker volumes

-v:把宿主机的/root/data/registry目录绑定到容器/var/lib/registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;

示例:

docker run -itd -v /root/data/registry:/var/lib/registry -p 5000:5000 --restart=always --name docker-registry registry:latest 

在镜像仓库中推送镜像registry-mysql之后,在/root/data/registry下能找到:

[root@JD repositories]# pwd
/root/data/registry/docker/registry/v2/repositories
[root@JD repositories]# ll
total 0
drwxr-xr-x 5 root root 55 Apr  1 23:32 registry-mysql

使用 -v 参数时如果本地目录不存在 Docker 会自动为创建一个文件夹,现在使用 –mount 参数时如果本地目录不存在,Docker 会报错

挂载一个本地主机文件作为数据卷

–mount 标记也可以从主机挂载单个文件到容器中

docker run --rm -it \
# -v $HOME/.bash_history:/root/.bash_history \
--mount type=bind,source=$HOME/.bash_history,target=/root/.bash_history \
ubuntu:17.10 \
bash

--rm :在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据。

但是,对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,因而可以在容器启动时设置–rm选项,这样在容器退出时就能够自动清理容器内部的文件系统

docker volume container

数据备份

docker compose

docker compose install

1
2
3
4
5
6
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ sudo chmod +x /usr/local/bin/docker-compose

$ docker-compose --version
docker-compose version 1.24.1, build 1110ad01

常用命令

删除已经停止的容器

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm 2d85b99b03b2

查看镜像、容器、数据卷所占用的空间

docker system df   

查看当前宿主机开放了哪些端口

netstat -tnulp

查看docker 信息

docker inspect [image id]