docker-ce安装

  1. 列出docker安装过的相关包
  1. $ sudo yum list installed | grep docker

docker相关,一篇就够了 - 图1

  1. 删除相关安装包
  1. $ sudo yum -y remove docker-ce.x86_64
  2. $ sudo yum -y remove docker-ce-selinux.noarch
  1. 设置docker-ce云源
  1. $ yum install -y yum-utils device-mapper-persistent-data lvm2
  2. $ yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
  1. 安装指定版docker-ce
  1. #安装指定版本
  2. $ yum install docker-ce-17.03.3.ce -y
  3. #不指定版本则安装最新版本
  4. #yum install docker-ce
  1. 启动docker,并设置开机启动
  1. #启动docker
  2. $ sudo systemctl start docker
  3. #设置开机启动
  4. $ sudo systemctl enable docker
  1. 修改docker 容器存储路径
  1. 先停止docker
  2. sudo systemctl stop docker
  3. 指定镜像和容器存放路径的参数是--graph=/var/lib/docker,我们只需要修改配置文件指定启动参数即可。
  4. Docker 的配置文件可以设置大部分的后台进程参数,在各个操作系统中的存放位置不一致,在 Ubuntu 中的位置是:/etc/default/docker,在 CentOS 中的位置是:/etc/sysconfig/docker
  5. 如果是 Ubuntu 则添加下面这行(因为 Ubuntu 默认没开启 selinux):
  6. OPTIONS=--graph="/root/data/docker" -H fd://# 或者DOCKER_OPTS="-g /root/data/docker"
  7. 最后重新启动,Docker 的路径就改成 /root/data/docker 了。
  8. 如果是centos7
  9. 修改docker.service文件,使用-g参数指定存储位置
  10. vi /usr/lib/systemd/system/docker.service
  11. ExecStart=/usr/bin/dockerd --graph /data/docker
  12. // reload配置文件
  13. systemctl daemon-reload
  14. // 重启docker
  15. systemctl daemon-reload && systemctl restart docker.service && systemctl enable docker.service
  16. //查看 Docker Root Dir: /var/lib/docker是否改成设定的目录/new-path/docker
  17. docker info

docker命令

docker 常用命令如下

  1. 管理命令:
  2. container 管理容器
  3. image 管理镜像
  4. network 管理网络
  5. node 管理Swarm节点
  6. plugin 管理插件
  7. secret 管理Docker secrets
  8. service 管理服务
  9. stack 管理Docker stacks
  10. swarm 管理Swarm集群
  11. system 查看系统信息
  12. volume 管理卷
  13. 如:docker container ls 显示所有容器
  14. 普通命令:
  15. attach 进入一个运行的容器
  16. build 从一个DockerFile构建镜像
  17. commit 从容器创建一个镜像
  18. cp 从容器和主机文件系统之间拷贝文件
  19. create 创建一个容器
  20. diff 检查容器文件系统上的更改
  21. events 从服务器获取实时事件
  22. exec 在正在运行的容器中运行命令
  23. export 将容器的文件系统导出为tar存档
  24. history 显示镜像的历史记录
  25. images 查看镜像列表
  26. import 从归档文件中创建镜像
  27. info 显示系统范围的信息
  28. inspect 返回Docker对象的低级信息
  29. kill kill运行中的容器
  30. load 从存档或者STDIN加载镜像
  31. login 登陆docker镜像仓库
  32. logout 退出docker镜像仓库
  33. logs 获取一个容器的日志
  34. pause 暂停一个或多个容器中的所有进程
  35. port 查看端口映射或容器的特定映射列表
  36. ps 查看容器列表
  37. pull 从镜像仓库拉取镜像
  38. push 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
  39. rename 重命名容器
  40. restart 重启容器
  41. rm 删除容器
  42. rmi 删除镜像
  43. run 创建一个新的容器并运行一个命令
  44. save 将指定镜像保存成 tar 归档文件
  45. search Docker Hub搜索镜像
  46. start 启动容器
  47. stats 实时显示容器资源使用情况的统计信息
  48. stop 停止容器
  49. tag 标记本地镜像,将其归入某一仓库
  50. top 展示一个容器中运行的进程
  51. unpause 恢复容器中所有的进程
  52. update 更新容器配置
  53. version 显示Docker的版本信息
  54. wait 阻塞直到容器停止,然后打印退出代码
  55. 如:docker images 显示所有镜像

image.gif

下面将分别介绍一些常用操作

docker 拉取并运行一个镜像

1、下载镜像

  1. $ docker pull centos

image.gif
2、查看已经下载的镜像

  1. $ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. centos latest 49f7960eb7e4 6 weeks ago 200MB
  4. hello-world latest f2a91732366c 8 months ago 1.85kB

image.gif
3、运行一个镜像并生成容器

  1. //运行一个centos镜像,并执行/bin/bash命令
  2. $ docker run centos /bin/bash

image.gif
输入命令docker ps或者docker container ls查看运行中的容器,发现列表为空,原因是容器在执行完成命令后会自动退出,下面介绍让让容器停留在后台的方法

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. $ docker container ls
  4. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

image.gif
使用命令docker ps -a或者docker container ls -a 查看所用容器,并显示了容器的状态

  1. $ docker ps -a
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 5525373371f3 centos "/bin/bash" 7 minutes ago Exited (0) 7 minutes ago nifty_rosalind

image.gif

docker 让镜像运行停留在后台

1、启动一个容器并后台运行
docker run命令 通过增加-i -t参数可以让容器并进入容器

  1. docker run -i -t centos /bin/bash

image.gif
按 Ctrl + P + Q 退出容器,再用 docker ps 进行查看

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 61b041e4e063 centos "/bin/bash" 3 minutes ago Up 3 minutes nervous_saha

image.gif
状态显示仍在运行中

docker 进入一个运行的容器

  1. $ docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 36afde543eb5 mysql:5.7 "docker-entrypoint.s…" About an hour ago Up About an hour 0.0.0.0:3306->3306/tcp mymysql
  4. $ docker exec -it 36afde543eb5 /bin/bash

image.gif
-i 保持STDIN打开 -t 分配一个虚拟TTY窗口

docker 提交一个镜像到镜像仓库

1、首先到https://hub.docker.com/注册一个账号,保存下用户名密码 2.控制台登陆dockerhub账户

  1. $ docker login
  2. 输入刚注册的用户名密码

image.gif
2、查看镜像

  1. $ docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. redis latest f06a5773f01e 2 days ago 83.4MB

image.gif
3、选择需要上传的镜像,重命名为指定的格式

  1. $ docker tag redis username/myredis:v1

image.gif

  1. username:为自己注册的用户名
  2. myredis:为自己为镜像取的名字
  3. v1:为任意设置的版本号

image.gif
4、完成上述操作后,即可提交镜像到自己的仓库

  1. $ docker push username/myredis:v1

image.gif

docker 映射文件从宿主机到容器,端口号映射

  1. //将宿主机的81端口映射到容器的80端口
  2. //将宿主机的/develop/data卷,映射到容器的/data
  3. $ docker run -i -t -p 81:80 -v /develop/data:/data centos /bin/bash

image.gif
-p:映射端口号 -v:磁盘目录映射

docker 更改端口号映射

  1. 运行中的容器无法映射新的端口号,也无法更改端口号映射,但可以通过两种方法解决

image.gif
1、iptable转发端口

  1. //查看容器ip
  2. $ docker inspect 36afde543eb5 | grep IPAddress
  3. "IPAddress": "172.17.0.2"
  4. //将主机的8081端口映射到宿主机的8080端口
  5. $ iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080

image.gif
2、先提交容器为镜像,再运行这个容器,同时指定新的端口映射

  1. //提交容器为镜像
  2. $ docker commit 9995ffa15f46 mycentos:0.1
  3. //停止旧的容器
  4. $ docker stop 9995ffa15f46
  5. //重新从旧的镜像启动容器
  6. $ docker run -i -t -p 8081:8080 mycentos:0.1

image.gif

从DockerFile创建镜像

  1. $ docker build -t myimage:v1 .

image.gif
-t :指定镜像名称和标签,格式为’name:tag’ .: 最后一个点代表当前目录,也可以换成其它的路径

docker启动后,设置需要自动运行的容器

  1. #在初次运行容器的时候设置
  2. $ docker run --restart always --name your_container_name
  3. #若初次运行时忘记设置,则可以用下面命令更新
  4. $ docker container update --restart=always your_container_name

配置阿里云镜像

修改/etc/docker/daemon.json文件配置,没有则新建;

  1. {
  2. "registry-mirrors": ["https://72idtxd8.mirror.aliyuncs.com"]
  3. }

重启daemon;

  1. $ systemctl daemon-reload

重启docker服务;


  1. $ systemctl restart docker

查看每个容器的IP

  1. docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)