Docker

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口,Docker 几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

一个完整的Docker有以下几个部分组成:

  1. Docker Client客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. Docker Container容器

Docker-ce 安装

配置软件源

Centos (这里用的是华为云镜像源)

1.添加Docker镜像源
wget wget -O /etc/yum.repos.d/docker-ce.repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo
2.清理yum缓存并更新yum远缓存
yum clean all && yum makecache

Ubuntu (这里用的是华为云镜像源)

1.信任Docker的GPG公钥:
curl -fsSL https://repo.huaweicloud.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
2.对于amd64架构的计算机,添加软件仓库:
sudo add-apt-repository "deb [arch=amd64] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
3.对于树莓派或其它Arm架构计算机,请运行:
echo "deb [arch=armhf] https://repo.huaweicloud.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list 
4.更新索引文件并安装
sudo apt-get update

Docker-ce 安装

Centos

1.卸载老版本
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine podman runc
2.安装docker-ce
yum install docker-ce

Ubuntu

1.卸载老版本
sudo apt-get remove docker docker-engine docker.io containerd runc
2.安装docker-ce
sudo apt-get install docker-ce

修改Docker镜像源,默认存储位置,Docker 私库地址 (注意逗号)

docker默认镜像源为docker hub,修改为国内镜像源,例如:

  • docker cn
  • 阿里云镜像站
  • 中国科技大学镜像站
  • 网易镜像站
  • 清华大学开源软件镜像站

Centos

# vim /etc/docker/daemon.json

{
   "registry-mirrors": ["http://hub-mirror.c.163.com"], #镜像地址
   "data-root": "/data/docker", #默认存储位置
   "insecure-registries": ["IP:Port"] #配置私库地址
}

Ubuntu

# sudo vim /etc/docker/daemon.json

{
   "registry-mirrors": ["http://hub-mirror.c.163.com"], #镜像地址
   "data-root": "/data/docker", #默认存储位置
   "insecure-registries": ["IP:Port"] #配置私库地址
}

启动docker 并设置开机自启

Centos

1.启动docker
systemctl start docker 
2.设置开机自启
systemctl enable docker

Ubuntu

1.启动docker
sudo service docker restart
2.设置开机自启
sudo systemctl enable docker

运行一个docker 示例

Centos

docker run hello-world

Ubuntu

sudo docker run hello-world

docker 常用命令

1、管理命令

docker version,查看docker客户端及服务端的版本信息;
docker info,查看docker容器的详细信息,除了如上版本信息,还有镜像、容器数据卷、容器网络、Registry地址、物理配置等信息;
docker --help,查看命令帮助;

2、镜像命令

docker images,查看本地所有顶层镜像(top level)信息的命令,按照创建时间倒序展示 ;
    docker images -a,查看本地所有镜像信息的命令,包含中间层;
    docker images -q,只显示镜像ID;
    docker images name:tag,根据镜像name:tag来查看详细信息,不支持模糊搜索;

docker history,查看镜像的历史信息;
    docker history name:tag,查看name:tag对应镜像的历史信息;

docker search,镜像搜索命令;
    docker search name,根据镜像name进行搜索;
    docker search --filter=stars=1000 name,增加筛选条件,只查询stars数量在1000以上的;

docker pull,拉取镜像;
    docker pull name:tag,根据name和tag拉取镜像;

docker rmi,移除镜像;
    docker rmi name:tag,根据name和tag删除镜像,该镜像如果已经生成容器则不能删除;如果同一个镜像有多个tag,则只有当最后一个tag删除时才会删除镜像;
    docker rmi -f name:tag,强制删除镜像,如论是否创建容器;
    docker rmi -f ${docker images -q},强制删除本地所有镜像;
    docker rmi id,根据镜像ID删除镜像,会先删除所有tag,然后删除镜像;

docker build,构建镜像;
    docker build -f container_path/dockerfile -t name:tag .,指定dockerfile构建name:tag镜像,注意最后有一个.符号;

docker save,导出镜像,适用于需要将镜像安装到没有网络条件的服务器上的场景;
    docker save -o E:\httpd.zip httpd:latest,将本地仓库中的httpd镜像导入到指定目录的指定文件中;

docker load,从指定文件中加载镜像,适用于在无网络条件的服务器上使用;
    docker load -i E:\httpd.zip,从指定目录的指定文件中加载镜像到本地仓库中;

docker tag,给指定的镜像打tag,常用于指定别名,用于上传到远程镜像仓库场景;
    docker tag httpd:latest zhangxun/httd:latest,一个镜像两个tag,删除任意一个都不会删除镜像,只有当所有tag都删除了才会真正删除镜像;但是如果删除镜像ID,则会先删除所有tag,再删除镜像;
    docker tag id zhangxun/httpd:latest,对指定ID的镜像打tag;
    docker tag id test.tecentcloudcr.com/project/httpd:latest,在新tag前面加上registry地址,表示后续将该镜像推送到指定的远程仓库,而非官方的Docker Hub;

docker push,将镜像推送到远程镜像仓库;
    docker push zhangxun/httpd:latest,默认是推送到Docker Hub的远程仓库,一定要加上用户名前缀,否则无法推送,没有用户名前缀的都是官方镜像;
    docker push test.tecentcloudcr.com/project/httpd:latest,推送到指定的远程仓库;

3、容器命令

docker run,新建并启动容器命令;
    docker run -it name,以交互方式新建启动容器,此处name为image的,非容器的,此时容器name随机;
    docker run --name newname name,新启动的容器指定名称为newname;
    docker run -d name,以守护方式启动容器;
    docker run -it -v local_path:container_path name,-v是指挂载数据卷,使得主机和容器地址挂载;
    docker run --name name02 --volumes-from name01 name:tag,启动name02容器,共享name01数据卷,name01称为数据卷容器;
    docker run -it --network=bridge name,启动容器使用某个指定的网络;

docker start,启动容器命令;
    docker start name,这里的name是容器的name;

docker restart,重启容器命令;
    docker restart name,这里的name是容器的name;

docker stop,停止容器命令;

docker kill,杀掉正在运行中的某个容器;

docker rm,移除容器;

docker ps,查看容器命令;
    docker ps -q,只显示容器ID;
    docker ps -a,显示正在运行和历史运行过的容器信息;
    docker ps -l -n num,显示最近创建的num个容器信息;
    -docker container ps和docker container ls的效果和docker ps完全一样;

docker top,查看容器中的进程信息;
    docker top name,查看name容器中的进程信息;
    docker container top name效果完全一样。

docker stats,查看容器的运行情况资源占用情况;
    docker stats name,查看某个容器的运行情况;
    docker container stats,效果完全一样;

docker logs, 查看容器中的日志;
    docker logs -f -t --tail=20 name,查看name容器中的日志,-f表示跟踪日志输出,-t显示时间戳,--tail n,只显示最新的n条日志信息;

docker inspect,查看docker容器的详细信息;
    docker inspect name,查看某个容器的详细信息;

docker attach,进入容器;
    docker attach name,进入正在运行的容器name的命令行,显示该容器的运行信息;

docker exec,进入容器并执行命令;
    docker exec -it name cmd,以交互方式进入容器name,同时执行cmd命令;

docker commit,打包生成镜像;
    docker commit -a="author" -m="commit info" name newname:tag,写上作者、提交信息,并将当前容器打包为newname:tag的容器;

docker cp,容器与宿主机之间的数据拷贝;推荐使用数据卷的功能,所以这个命令实际中不常用;
    docker cp name:/container_path local_path,将name容器中container_path路径下内容cp到宿主机的local_path路径下;
    docker cp local_path name:/container_path,将宿主机的local_path路径下内容cp到name容器中container_path路径下

docker volume,查看数据卷的信息;
    docker volume ls,查看所有存在的数据卷信息;
    docker volume inspect name,查看数据卷的详细信息,比如对应主机的路径;
    docker volume create name,创建一个name名称的数据卷;

docker network,网络设置相关;
    docker network ls,查看宿主机上docker的网络列表;
    docker network inspect name,根据name查看某个具体网络的信息;
    docker network create --driver bridge --subnet 172.17.0.0/16 --gateway 172.17.0.1 yourNetName,创建自定义网络,指定网络类型、子网范围以及网关地址;

docker export,导出容器;
    docker export -o /root/docker/httpd-01.tar container-id,将某个容器(无论是否正在运行)导出到指定路径的指定文件;

docker import,导入容器;
    docker import /root/docker/httpd-01.tar - test/imagename:tag,从指定路径导入容器,同时创建一个基于容器快照的镜像;
    评论
    0 评论
avatar

取消