Docker学习总结

参考

https://www.runoob.com/docker/docker-architecture.html

安装docker

docker新版(Docker Engine-Community)支持 Ubuntu 16.04+

官方安装脚本
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或者
curl -sSL https://get.daocloud.io/docker | sh
手动安装
卸载旧版本
sudo apt-get remove docker docker-engine docker.io containerd runc
  1. 使用Docker仓库进行安装
  2. 使用Shell脚本进行安装

详见

安装完毕

若要使用Docker为非root用户,则需添加用户组,并且logout

sudo usermod -aG docker your-user
logout

Docker镜像加速

国内地址
网易: https://hub-mirror.c.163.com/
阿里云: https://<你的ID>.mirror.aliyuncs.com
七牛云: https://reg-mirror.qiniu.com

配置加速器

Ubuntu14.04,Debian7Wheezy

/etc/default/docker文件中修改

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

重新启动服务

sudo service docker restart
Ubuntu16.04+,Debian8+,CentOS7

对于使用systemd的系统,在/etc/docker/daemon.json中写入(文件不存在则创建)

{
    "registry-mirrors":[
        "https://reg-mirror.qiniu.com/"
        ]
}

重新启动服务

sudo systemctl daemon-reload
sudo systemctl restart docker
检查加速器是否生效
docker info
Registry Mirrors:
    https://reg-mirror.qiniu.com

Windows,MacOS参考此文

Docker 镜像使用

列出镜像列表 docker images

 docker images           
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB
php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB

选项说明:

  • REPOSITORY: 表示镜像的仓库源
  • TAG: 镜像的标签
  • IMAGE ID: 镜像ID
  • CREATED: 创建时间
  • SIZE: 镜像大小
    同一个仓库源可以有多个TAG代表不同的版本,REPOSITORY:TAG 例如ubuntu:16.04
    如果不指定一个镜像的版本标签,,则默认使用ubuntu:latest镜像

获取一个新的镜像

 docker pull ubuntu:16.04

查找镜像

  1. Docker Hub搜索镜像
  2. docker search 命令
 docker search ubuntu
NAME                                                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
ubuntu                                                    Ubuntu is a Debian-based Linux operating sys…   11118               [OK]                
dorowu/ubuntu-desktop-lxde-vnc                            Docker image to provide HTML5 VNC interface …   446                                     [OK]
rastasheep/ubuntu-sshd                                    Dockerized SSH service, built on top of offi…   245                                     [OK]
consol/ubuntu-xfce-vnc                                    Ubuntu container with "headless" VNC session…   221                                     [OK]
ubuntu-upstart                                            Upstart is an event-based replacement for th…   110                 [OK]                
neurodebian                                               NeuroDebian provides neuroscience research s…   68                  [OK]                
1and1internet/ubuntu-16-nginx-php-phpmyadmin-mysql-5      ubuntu-16-nginx-php-phpmyadmin-mysql-5          50                                      [OK]
......

选项说明:

  • NAME: 镜像仓库源的名称
  • DESCRIPTION: 镜像的描述
  • OFFICIAL: 是否官方发布
  • STARS: 类似github的start
  • AUTOMATED: 自动构建

删除镜像

docker rmi REPO/ID

删除报错

  1. image has dependent child images
    原因: 有另外的 image FROM 了这个 image,可以使用下面的命令列出所有在指定image之后创建的image的父image
 docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' (docker image ls -q --filter since=IMAGE ID)
#查找出所有依赖的父镜像
> [xxh/ubuntu15:v2] sha256:412299340aa1cdc30b2f47a7e14e922af6b2a984054afb97f58dbdbcf719743c sha256:9b9cb95443b5f846cd3c8cfa3f64e63b6ba68de2618a08875a119c81a8f96698
> [镜像名] 子镜像ID 父镜像ID
#先删除依赖于父镜像创建的子镜像
  1. is referenced in multiple repositories
    原因: 同一个镜像分配了多个REPO:TAG名称,先指定名称即可

创建镜像

有两种方法:

  1. 从已经创建的容器中更新镜像
  2. 使用Dockerfile指令从零开始创建新镜像

更新镜像

docker stop CONTAINERID
docker commit -m="MESSAGE" -a="AUTHOR" CONTAINERID REPO:TAG

选项说明:

  • -m: 提交的描述信息
  • -a: 作者信息
  • CONTAINERID: 容器ID
  • REPO:TAG:指定要创建的镜像名

构建镜像

创建一个Dockerfile

FROM    centos:6.7
MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd
RUN     useradd runoob
RUN     /bin/echo 'runoob:123456' |chpasswd
RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE  22
EXPOSE  80
CMD     /usr/sbin/sshd -D
  1. 每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。
  2. 第一条FROM,指定使用哪个镜像源
  3. RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。
  4. 然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
docker build -t REPO:TAG FILEDIR

选项说明:

  • -t: 指定要创建的镜像名
  • FILEDIR: Dockerfile所在的目录

设置镜像标签

docker tag IMAGEID REPO:TAG

其他操作

# 停止所有容器
docker ps -a | awk '{print 1}'|xargs docker stop
docker stop (docker ps -a-q)
# 删除所有容器
docker ps -a | awk '{print 1}'|xargs docker rm
docker rm (docker ps -a -q)
# 删除镜像
docker images | awk '{print 3}'|xargs docker rmi
#通用操作
docker run -d -it REPO:TAG -p : -v : --name NAME -h HOSTNAME -m 1G --memory-swappiness=60 --memory-swap=-1 --restart=always

docker资料https://www.cnblogs.com/zhuochong/category/1310443.html

解决hostconfig.json 被覆盖问题& 修改hostname(https://blog.csdn.net/weixin_42292991/article/details/95529217)

posted @ 2020-07-20 23:27  两块钱的争论  阅读(114)  评论(0)    收藏  举报