docker

本文基于Mac
以前都只是听说docker,现在项目组要进行自动打包,以前都是组长超哥搭建的,超哥走后没人会弄的,赶上手上没有开发任务,就试着玩玩,从周一到周三(今个就是周三),翻找各种资料进行搭建,下载docker,下载镜像,完全都是找别人的博客区搭建,对docker,gitlab,gitlab-ci,gitlab-runner 还有.gitlab-ci.yml这个配置文件全都不懂。今天用于掉坑里了,想要找原因,找问题都不知道从什么地方下手,一遍又一遍的重试,我受够了,全部卸载,重新搞。也给自己长个记性,不要区复制人家的代码,那不是你写的。

下载docker

Docker官网
https://www.docker.com

mac版 下载地址 以及测试是否好使
https://store.docker.com/editions/community/docker-ce-desktop-mac

Docker for Mac vs. Docker Toolbox

如果你的电脑上已经装了 Docker Toolbox在想安装Docker for Mac,建议你一定看看这个网址,Docker for Mac 和 Docker Toolbox共存
https://docs.docker.com/docker-for-mac/docker-toolbox/

Docker Toolbox

Mac Docker Toolbox下载地址
https://docs.docker.com/toolbox/toolbox_install_mac/

Docker Toolbox在Mac上的/usr/local/bin中安装docker,docker-compose,docker-machine。 它还安装VirtualBox。 在安装的时候,Toolbox使用docker-machine来配置一个名为default的VirtualBox虚拟机.
在Mac上使用docker或docker-compose之前,通常使用命令eval $(docker-machine env default)来设置环境变量,以便docker或docker-compose知道如何与在VirtualBox上运行的Docker Engine通信。

docker_第1张图片
toolbox-install.png

Docker for Mac

  • Docker for Mac不使用VirtualBox,而是HyperKit,一种基于Hypervisor的轻量级MacOS虚拟化解决方案.
docker_第2张图片
docker-for-mac-install.png

Docker Toolbox and Docker for Mac coexistence共存

docker_第3张图片

猜猜看

  • docker-compose.yml 文件用于定义Docker容器在生产过程中的行为。

Docker 命令

基本命令

  • docker run -d -p 80:80 --name webserver nginx 镜像如果在本地找不到就从Docker Hub上拉。
  • docker ps 查看正在运行的容器
  • docker ps -a 查看正在运行的容器包括已经停止的
  • docker start 开启容器 names 可以查看 ps命令 names字段
  • docker stop 关闭容器
  • docker rm -f 删除指定容器
  • docker images 查看镜像列表
  • docker rmi 删除镜像 name,id是 docker images中的REPOSITORY字段,IMAGE ID字段
  • docker rmi -f <> 强制删除镜像
  • docker inspect 查看容器的详细信息
  • docker run -p 4000:80 使用-p,将您的计算机的端口4000映射到容器发布的端口80。
  • docker rm $(docker ps -aq) 删除所有容器
  • docker stop $(docker ps -q) & docker rm $(docker ps -aq)
    一条命令停用并删除容器

docker run 语法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

  • -d: -d: 后台运行容器,并返回容器ID
  • -i: 以交互模式运行容器
  • -t: 为容器重新分配一个伪输入终端
  • -P: 指定端口映射.Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
  • -p:则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort
  • --link 参数可以让容器之间安全的进行交互。--link 参数的格式为 --link name:alias,其中 name 是要链接的容器的名称,alias 是这个连接的别名。

Docker使用遇到的问题

docker login 登陆认证失败

  • 问题:
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password
  • 原因:
    使用email可以登陆,但是使用命令docker login使用email是不可以登陆的,用户名是DockerHub上的独一无二的用户名。
  • 解决使用唯一的用户名fengxing
image.png

docker build -t friendlyhello . 下载所需要的文件时报错

  • 问题
Get https://registry-1.docker.io/v2/library/python/manifests/2.7-slim: unauthorized: incorrect username or password
  • 原因 由于是公共的repo 所以不需要登陆
  • 解决
    docker logout
    然后在拉

docker push 问题

  • 问题
    denied: requested access to the resource is denied
  • 原因
    语法 docker push username/repository:tag
    username是你DockerHub中的用户名
  • 解决
    查看本地镜像
➜  Dockerfile docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             SIZE
friendlyhello          latest              2ea789bd3491        About an hour ago   195MB
test                   part                2ea789bd3491        About an hour ago   195MB
test/get-started       part2               2ea789bd3491        About an hour ago   195MB
                               b0d47be5c956        2 hours ago         184MB
learn/ping             latest              8f10d061d860        18 hours ago        140MB
gitlab/gitlab-ce       latest              556635d89f7c        3 days ago          1.28GB
ubuntu                 latest              747cb2d60bbe        9 days ago          122MB
python                 2.7-slim            9724e90f1f17        10 days ago         184MB
gitlab/gitlab-runner   latest              fa332bc1925c        2 weeks ago         371MB
busybox                latest              54511612f1c4        5 weeks ago         1.13MB
rancher/agent          v1.0.2              860ed2b2e8e3        16 months ago       454MB
learn/tutorial         latest              a7876479f1aa        4 years ago         128MB

使用 docker tag改名字
➜ Dockerfile docker tag 2ea789bd3491 fengxing/test:part
在此查看镜像改名成功
➜Dockerfile docker images
在次push
docker push fengxing/test:part

docker push 出现 ... net/http: TLS handshake timeout

  • 问题
Post https://registry-1.docker.io/v2/fengxing/test/blobs/uploads/: net/http: TLS handshake timeout
  • 原因: 应该是被屏蔽了
  • 解决
  1. 使用国内镜像
  2. 稍后再次push

你可能感兴趣的:(docker)