简述
介于上篇k8s的博文,我整理了一下之前学习docker的笔记。 docker环境搭建

1.获取最新版的Docker安装包

  $ wget -qO- https://get.docker.com/ | sh

2.直接使用docker无须加 sudo17.04

# Add the docker group if it doesn't already exist.

      $ sudo groupadd docker

  # Add the connected user "${USER}" to the docker group.

  # Change the user name to match your preferred user.

 
  # You may have to logout and log back in again for
 
  # this to take effect.

      $ sudo gpasswd -a ${USER} docker

  # Restart the docker daemon.

 
      $ sudo service docker restart
  
  #############单条指令##############
      sudo usermod -aG docker 
  
  $USER      
  
  # 把当前用户加入docker组

————————————————

3 . 从 17.04 以后,可以用下面的命令安装。

$ export CHANNEL=stable
 
  $ curl -fsSL https://get.docker.com/ | sh -s -- --mirror Aliyun
镜像基本操作指令

1.搜索镜像

 $ sudo docker search ubuntu

2.获取镜像

  $ sudo docker pull ubuntu

3.查看镜像信息

$ sudo docker images
  
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
  
  ubuntu              latest              ccc7a11d65b1        
  
  3 weeks ago         
  
  120MB
  
  swarm               latest              
  
  7ecf8baf8eae        
  
  8 weeks ago         
  
  15.8MB

————————————————

4.查看镜像的详细信息

$ sudo docker inspect 
  
  7ecf8baf8eae 

 
  #或
  $ sudo docker inspect ubuntu

5.删除镜像

 $ sudo docker rmi swarm
 
  Error response from daemon: conflict: unable to remove repository reference 
  
  "swarm" (must force) - container c445ef19d3e7 is using its referenced image 
  
  7ecf8baf8eae

因此,删除镜像之前得确保容器已删除

6.删除容器

$ sudo docker rm 
  
  7ecf8baf8eae  
  
  #删除指定容器
  
  $ sudo docker rm $(docker ps -a -q)  
  
  #删除所有已生成容器

7.复制镜像

$ sudo docker tag ubuntu:latest hzy/
  
  test:latest

  
  hzy@hadoop:~$ sudo docker images

 
  REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

  hzy/
  
  test            latest              ccc7a11d65b1        3 weeks ago         120MB

 
  ubuntu              latest              ccc7a11d65b1        3 weeks ago         120MB
  
  swarm               latest              7ecf8baf8eae        8 weeks ago         15.8MB
创建镜像

1.创建一个新镜像,进行操作

 $ docker run -it ubuntu /bin/bash --name bieming

  root@
  
  3138d574074e:/
  
  #

2.使用 docker commit 来提交一个新的镜像

$ sudo docker commit -m 
  
  "added a new file" -a 
  
  "huangzy" 
  
  3138d574074e hzy/test
 
  3138d574074esha256:f8b1d41ff97589f7c207577b391b1d5074b197a1ec3196a8907269ec6e00dcae
  
  # -a, --author="" 作者信息
 
  # -m, --message="" 提交消息
  
  # -p, --pause=ture 提交时暂停容器运行
存出和载入镜像

1.存出镜像

 $ sudo docker save -o ubuntu.tar ubuntu:latest

2.载入镜像

$ sudo docker load --input ubuntu.tar 

  Loaded image: ubuntu:latest

  #或
  
  $ sudo docker load < ubuntu.tar
容器

1.创建容器

$ sudo docker run -it ubuntu:latest /bin/bash
 
  root@
  
  939831baa91d:/
  
  # 
 
  # -t 分配一个伪终端绑定到容器的标准输入上
 
  # -i 让容器的标准输入保持打开
 
  # -d 让Docker容器在后台以守护态(Daemonized)形式运行

2.终止容器

$ sudo docker stop 
  
  939831b

3.查看容器状态

$ sudo docker ps 
  
  #或

  $ sudo docker ps -a -q  
  
  # 可查看到终止状态的容器

4.使用 docker start 命令来重新启动处于终止状态的容器

$ sudo docker start 
  
  939831b
  
  #或
  
  $ sudo docker restart 
  
  939831b

5.删除容器

$ sudo docker rm 
  
  3138d574074e

  Error response from daemon: You cannot remove a running container 
  
  3138d574074e5a45a543760c2ecb3935b0173d89940c05fa3cd969d1112338ff. Stop the container before attempting removal or force remove  

  #应该先停止容器服务,再进行删除。
 
  $ sudo docker stop 
  
  3138d574074e
导入和导出容器

1.导出容器(无论该容器是否处于运行状态)

$ sudo docker export 
  
  3138d > test_for_run.tar

2.导入容器(导出的文件可以导入,成为镜像)

$ cat test_for_run.tar | sudo docker import - test/ubuntu:v1
  
  sha256:b974a00be6dd0ac5f794c3ec5ef6b1812cdc535390b67950cf220aa1e557c759
仓库(Repository)

仓库:是集中存放镜像的地方。

注册服务器(Registry):是存放仓库的具体服务器。

1.终端登录Docker Hub

$ sudo docker login 
  [sudo] password 
  
  for hzy: 

  Login with your Docker ID to push and pull images from Docker Hub. 
  
  If you don
  
  't have a Docker ID, head over to https://hub.docker.com to create one.

 
  Username: s152118130110
 
  Password: 

   
  Login Succeeded

2.将本地镜像推送到Docker Hub

  $ sudo docker push swarm:latest
创建和使用私有仓库

1.默认情况下,会将仓库存放于容器的 /tmp/registry 目录下,如果容器被删除,则数据也会丢失,所以我们可以通过 -v 参数来将镜像文件存放在本地的指定路径

$ sudo docker run –d –p 
  
  5000:
  
  5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry
  
  # -i:   保持sdtin开放状态

  # -d:   使容器以守护进程方式后台运行,并打印容器id
 
  # -t:   分配一个tty(虚拟终端设备)

  # -v:   绑定挂载一个容器内的路径到宿主机路径
 
  # -p:   映射一个容器的端口到宿主机端口
 
  # -restart: 当容器退出时的重启策略
 
  # -name:    给容器命名一个名称

打开chrome输入 http://127.0.0.1:80/v2

2.标记

 $ sudo docker tag swarm 
  
  192.168.
  
  18.19:
  
  5000/swarm

3.上传

$ sudo docker push 
  
  192.168.
  
  18.19:
  
  5000/swarm

  The push refers to a repository [
  
  192.168.
  
  18.19:
  
  5000/swarm]

  Get https://
  
  192.168.
  
  18.19:
  
  5000/v2/: http: server gave HTTP response to HTTPS client

  
  #由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“192.168.1.100:5000”请求改为http

 
  
  #在 "etc/docker" 目录下,创建daemon.json文件,并在文件写入:

  
  {
  
  "insecure-registries":[
  
  "ip地址:5000"]}

 
  
  #重新启动docker
 
  $ sudo service docker restart

   
  #重新上传镜像即可

  
  $ sudo docker push 
  
  192.168.
  
  18.19:
  
  5000/swarm
 
  # 查看上传是否成功

  
  $ curl http://
  
  192.168.
  
  18.19:
  
  5000/v2/_catalog

 
  {
  
  "repositories":[
  
  "swarm"]}

4.下载镜像

 $ sudo docker pull 
  
  192.168.
  
  18.19:
  
  5000/swarm
客户机访问Registry

1.对于需要访问Registry仓库的客户机,需要修改文件。

# ubuntu 在以下文件添加 {"insecure-registries":["192.168.18.19:5000]}

  
  $ vi /etc/docker/daemon.json 

  # centos 在以下文件添加 OPTIONS=‘--SELINUXENABLED--INSECUREREGISTRY192.168.18.19:5000’

  $ vi /etc/sysconfig/docker
数据卷

-v标记可以指定挂载一个本地的目录到容器中-v

$ docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py

 
  # 地目录的路径必须是绝对路径,如果目录不存在 Docker 会自动为你创建它。

2 . 使用 -v 标记也可以从主机挂载单个文件到容器中

$ docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
  
  # 这样可以记录在容器输入过的命令