首页 > 其他 > 详细

Docker基础操作

时间:2019-03-28 23:15:15      阅读:150      评论:0      收藏:0      [点我收藏+]

安装

ubuntu16.04安装docker

sudo apt-get  update  
sudo apt-get install  docker
sudo apt-get install  docker.io
sudo apt-get install  docker-registry
# 启动docker
sudo systemctl  start  docker

win10安装docker

  1. 打开控制面板 --> 程序 --> 启用或关闭windows功能 --> 勾选Hyper-V --> 根据提示进行重启(打开这个功能则无法再使用VMware和virtualbox了)

  2. docker安装文件下载链接(需要登陆dockers,如果没有账号,注册一个就好)

  3. 安装docker,一路next

  4. 启动后任务栏上会出现一个‘鲸鱼’的图标

镜像加速

linux:

vim /etc/docker/daemon.json (不存在该文件则创建一个新的)
添加如下内容:

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

windows:

右键任务栏‘小鲸鱼’图标,选择Settings --> Daemon 
选择Basic
在Registy mirrors中输入:http://hub-mirror.c.163.com

参数说明

参数 说明
-t 让docker分配一个伪终端并绑定到容器的标准输入上
-i 容器的标准输入保持打开
-d 后台运行
--name 创建容器时给容器命名
-v 共享文件或者目录的映射;或者是创建可以共享的数据卷容器
--volumes-from 指定共享的数据卷容器
-p 绑定端口进行映射
--expose 暴露端口号
--link 链接另一个容器
--net 指定桥接网络

镜像操作

下载镜像

sudo docker pull REPOSITORY:TAG    

查看本地镜像

sudo docker images                

搜索镜像

sudo docker search mysql 

删除本地镜像

sudo docker rmi [-f] REPOSITORY:TAG   

运行bash应用

sudo docker run -it REPOSITORY:TAG /bin/bash       
    -t:在新容器内指定一个伪终端或终端。
    -i:允许你对容器内的标准输入 (STDIN) 进行交互。

更改Tag区分版本

sudo docker tag ubuntu:15.10 ubuntu:latest 

基于容器创建镜像

sudo docker commit -m '描述信息' -a '作者'  容器的id  新镜像名称   

本地镜像打包导出

sudo docker save -o ubuntu.15.10.tar REPOSITORY:TAG  

导入打包镜像

sudo  docker load --input ubuntu.15.10.tar  

查看镜像详细信息

sudo docker inspect ubuntu     

容器操作


sudo docker create  -it  REPOSITORY:TAG                          # 新建容器

sudo docker start NAME/CONTAINER ID                              # 后台启动容器

sudo docker run -it REPOSITORY:TAG /bin/bash                     # 创建并启动容器

sudo docker ps -a                                                # 查看已有的容器

sudo docker run -d REPOSITORY:TAG /bin/bash -c 'while true;do echo "hello world" ;sleep 1;done'    # 后台守护态形式运行

sudo docker logs NAME(name是ps查看,默认生成的)                # 获取后台运行的输出信息

sudo docker attach NAME/CONTAINER ID   (退出后容器stop)          # 进入后台容器
or
sudo docker exec -ti NAME/CONTAINER ID /bin/bash  (退出后容器任然在运行)


sudo docker stop NAME/CONTAINER ID                               # 终止容器
or
sudo docker kill NAME/CONTAINER ID

sudo docker rm NAME/CONTAINER ID                                 # 删除容器
or
sudo docker rm -f NAME/CONTAINER ID

sudo docker export NAME/CONTAINER ID >test.tar                   # 导出容器
    
cat test.tar | sudo docker import - REPOSITORY:TAG               # 导入容器

docker rename NAME 新名称                                        # 容器重命名

数据管理

数据卷

主机和容器共享数据

注意:win10下右击任务栏下的小鲸鱼图标,点击settings --> Shared Drives 勾选一个磁盘准许用于容器共享目录

#                     命名       本机目录:映射到的容器目录(默认为可读写)
docker run -it --name ubuntu  -v V:\workspace:/home/jfxu  jfxu/ubuntu16.04:latest

#                     命名       本机目录:映射到的容器目录:只读
docker run -it --name ubuntu  -v V:\workspace:/home/jfxu:ro  jfxu/ubuntu16.04:latest

数据卷容器

容器和容器之间共享数据

# 指定数据卷容器/dbdate
docker create -it -v /dbdate --name db0 jfxu/ubuntu16.04
# 共享db0中的数据卷容器
docker run -it --volumes-from db0 --name db1 jfxu/ubuntu16.04
docker run -it --volumes-from db0 --name db2 jfxu/ubuntu16.04
# 三个容器之间的可以通过/dbdate数据卷容器分享文件等

主机-容器-容器之间共享

docker create -it -v /share --name db0 jfxu/ubuntu16.04:latest
docker run -it --volumes-from db0  -v V:\share:/share  --name db1  jfxu/ubuntu16.04:latest

容器互联

暴露端口方式(主机无法访问)

#               暴露容器5000的端口给其它容器访问
docker run -d --expose=5000 --name web training/webapp  python app.py
# 进入bash查看ip
docker exec -it web /bin/bash

        ifconfig  eth0
        eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:03
                  inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
                  UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
                  RX packets:3101 errors:0 dropped:0 overruns:0 frame:0
                  TX packets:1423 errors:0 dropped:0 overruns:0 carrier:0
                  collisions:0 txqueuelen:0
                  RX bytes:4430088 (4.4 MB)  TX bytes:81348 (81.3 KB)
# 启动一个Linux系统                  
docker run -it --name ubuntu jfxu/ubuntu16.04 /bin/bash  
# 直接访问web容器的ip和端口
jfxu@6ea6db75cc53:/$ curl 172.17.0.2:5000
Hello world!

端口映射方式

语法:

#               主机ip:主机port:容器port(默认是tcp,可以不写)  多端口绑定
docker run  -p  ip:hostPort:containerPort(/udp) [ip:hostPort:containerPort(/udp)] [ip:hostPort:containerPort(/udp)] ... REPOSITORY:TAG

本机端口 ---> 虚拟机端口

docker run -d -p 5000:5000 training/webapp python app.py

指定地址的端口 ---> 虚拟机端口

docker run -d -p 10.10.75.1:5000:5000 training/webapp python app.py

指定地址的任意端口 ---> 虚拟机端口

docker run -d -p 10.10.75.1::5000 training/webapp python app.py

端口动态映射

使用iptables

容器链接

# 启动一个web server
docker run -itd --name=web training/webapp
# 启动一个ubuntu并链接到web
docker run -itd --link web --name=client jfxu/ubuntu16.04
# 进入client
docker exec -it client /bin/bash
# 访问web server
$ curl 172.17.0.2:5000
Hello world!

单主机网络

自定义网络

# 创建网络
docker network create share
23a6ca73ecd77c0a877df1d31732240df761b871ddfe3d17b7074a60d599cab8

# 查看创建的桥接网络
PS C:\Users\jfxu> docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
faff47332d74        bridge              bridge              local
9544738b8ff0        host                host                local
7bc6102f7cc3        none                null                local
23a6ca73ecd7        share               bridge              local
###################################################
# docker network rm share   # 删除自定义网络      #
###################################################

创建统一网络内的容器

# 启动一个web server
docker run -itd --net=share training/webapp python app.py
97ab73ed162d93ed4dd2ac99fd9c3816f6610e5334f84ff5094458a2d608ed5d
# 启动第一个client
docker run -itd --net=share --name=cli0 jfxu/ubuntu16.04
fa685d8fc0bddec747db35e7d4f204c12313898ab8b9c29c4c5192a241745210
# 启动第二个client
docker run -itd --net=share --name=cli1 jfxu/ubuntu16.04
dc6f13cd41eebdc4dddb25378347dd6b7ed7e8c23d8a0eff935a7a2db6688941
# 启动第三个client
docker run -itd --net=share --name=cli2 jfxu/ubuntu16.04
544a8581f7e57d514121ae11aa071e0dd67a310696c5ff82d3e470624936049c
# 查看已经启动的容器
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
544a8581f7e5        jfxu/ubuntu16.04    "/bin/bash"         6 seconds ago        Up 4 seconds                            cli2
dc6f13cd41ee        jfxu/ubuntu16.04    "/bin/bash"         11 seconds ago       Up 9 seconds                            cli1
fa685d8fc0bd        jfxu/ubuntu16.04    "/bin/bash"         18 seconds ago       Up 16 seconds                           cli0
97ab73ed162d        training/webapp     "python app.py"     About a minute ago   Up 59 seconds       5000/tcp            stoic_sinoussi

# 随便进入一个client
docker exec -it cli0 /bin/bash
# 访问webserver成功(先要进入webserver查看ip和端口号,这个server是一个flask server,app.py中默认的端口号是5000)
curl 172.19.0.2:5000
Hello world!

多主机网络

Docker现在提供了一个新的全局范围的overlay网络驱动,这意味着overlay的网络可以跨越多台Docker宿主机。并且这些Docker宿主机可以存在于不同的数据中心,甚至不同的云服务提供商中!


Docker基础操作

原文:https://www.cnblogs.com/jfxu/p/10618415.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!