Docker 安装与使用基础

常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
docker ps [-a] #查看运行容器状态,-a 查看所有容器
docker stop <容器id> #停止运行容器
docker rm <容器id> [-f] #删除容器,-f 删除运行的
docker rmi <镜像id> #删除镜像
docker exec -it <容器id> </bin/bash或者sh> 进入容器(bash或者sh)
# -p端口映射 -v挂载 -d后台,--name容器名字,--rm和-d不能通用,--rm启动停止后删除
docker run -p 80:80 -v /data:/data --name mynginx -d nginx:latest
# 运行容器并进去,一次性
docker run -it --rm ubuntu:18.04 /bin/bash
exit #退出容器
#添加标签
docker node update --label-add <KEY>=<VALUE> <NODE ID|NAME>
#查看节点详细信息
docker node inspect <NODE ID|NAME>
#查看网络
ifconfig
#推镜像到仓库
docker push exxk/gitlab_cloud:tagname
#拉取镜像
docker pull exxk/gitlab_cloud:tagname
#远程连接
sudo docker -H tcp://ip:port <docker名令>
#eg查看远程的又什么镜像
sudo docker -H tcp://10.14.0.4:2375 images

docker安装

1
2
3
4
5
6
7
8
9
10
11
12
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
#或者阿里镜像
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum makecache fast
sudo yum install docker-ce
systemctl start docker.service
# 开机启动
systemctl enable docker
sudo docker run hello-world
sudo docker version
yum list docker-ce --showduplicates | sort -r

daemon设置

修改/etc/docker/daemon.json文件

1
2
3
4
5
vim /etc/docker/daemon.json
#改完后重新加载配置
sudo systemctl daemon-reload
#重启docker
sudo systemctl restart docker
docker加速阿里云加速地址
1
2
3
4
5
6
7
#等效于添加daemon.json文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://*****.mirror.aliyuncs.com"],
"hosts":["unix:///var/run/docker.sock"]
}
EOF
远程访问docker
方法1

在daemo.json添加"hosts":["tcp://0.0.0.0:2375","unix:///var/run/docker.sock"]

hosts 分tcp,uninx,fd三种模式,第一中时tcp指定网络连接方式,0.0.0.0:2375是指所有网络都可以连接,不安全,因此一般会加上stl证书形式,这里我用的局域网,所有没有加证书,指定局域网设置主机所属ip例如网卡2的ip为10.14.0.2,因此设置为10.14.0.2,只有10.14.0这个局域网可以访问,第二种uninx时指本地可以自由连接docker,第三种,理解不是很清楚,不发表见解

方法2(方法1能采用尽量用1)

直接修改服务的启动文件,添加-H参数指定

1
2
3
4
5
6
#解决portainner添加节点失败centos7.2 修改 /lib/systemd/system/docker.service
#ExecStart=/usr/bin/dockerd
#修改为
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl daemon-reload
systemctl restart docker.service
参考:docker 远程连接

docker-compose安装

法一(当前采用)
1
2
3
4
#pip安装方式
pip install docker-compose
#pip卸载方式
pip uninstall docker-compose
法二

安装docker-compose(以容器类型安装)

法三
1
2
3
4
5
6
7
sudo -i
#安装脚本,替换为最新的版本 ,这一步会失败,执行sudo -i
curl -L https://github.com/docker/compose/releases/download/1.15.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
#添加执行权限
chmod +x /usr/local/bin/docker-compose
#测试(失败,需要执行./docker-compose --version 没全局)
docker-compose --version

基本常用命令

1
2
3
4
5
docker-compose up -d
docker-compose down
docker-compose stop
docker-compose rm
docker-compose logs

docker-machine

linux

1
2
3
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine

windos git bash

1
2
3
if [[ ! -d "$HOME/bin" ]]; then mkdir -p "$HOME/bin"; fi && \
curl -L https://github.com/docker/machine/releases/download/v0.12.2/docker-machine-Windows-x86_64.exe > "$HOME/bin/docker-machine.exe" && \
chmod +x "$HOME/bin/docker-machine.exe"

问题以及解决方法

  1. docker info 出现如下警告

    奇葩现象,在mongo里面添加了用户之后,springboot连接数据库就连接不是,但是外面能连接上,然后docker info会出现下面的错误,然后执行下面 的解决方案就可以连接上了

    可能(阿里云概率)会导致一个stack服务无法通过宿主机内网ip访问第二个stack服务

    1
    2
    WARNING: bridge-nf-call-iptables is disabled
    WARNING: bridge-nf-call-ip6tables is disabled

    解决:

    方式一

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 方式一
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
    echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables

    # 方式二
    vi /etc/sysctl.conf
    # 添加以下内容
    net.bridge.bridge-nf-call-ip6tables = 1
    net.bridge.bridge-nf-call-iptables = 1
    #最后执行
    sysctl -p
  2. 问题:构建镜像不能用-减号命名镜像的名字,使用docker-statck 部署找不到镜像

  3. 问题: 执行sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

    1
    2
    3
    4
    5
    [root@lfadmin ~]# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    已加载插件:fastestmirror, langpacks
    adding repo from: https://download.docker.com/linux/centos/docker-ce.repo
    grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
    Could not fetch/save url https://download.docker.com/linux/centos/docker-ce.repo to file /etc/yum.repos.d/docker-ce.repo: [Errno 12] Timeout on https://download.docker.com/linux/centos/docker-ce.repo: (28, 'Resolving timed out after 30541 milliseconds')

    解决:

    vim /etc/yum.repos.d/docker-ce.repo

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    [docker-ce-stable]
    name=Docker CE Stable - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/stable
    enabled=1
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-stable-debuginfo]
    name=Docker CE Stable - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/stable
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-stable-source]
    name=Docker CE Stable - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/stable
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-edge]
    name=Docker CE Edge - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/edge
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-edge-debuginfo]
    name=Docker CE Edge - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/edge
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-edge-source]
    name=Docker CE Edge - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/edge
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-test]
    name=Docker CE Test - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/test
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-test-debuginfo]
    name=Docker CE Test - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/test
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-test-source]
    name=Docker CE Test - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/test
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-nightly]
    name=Docker CE Nightly - $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/$basearch/nightly
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-nightly-debuginfo]
    name=Docker CE Nightly - Debuginfo $basearch
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/debug-$basearch/nightly
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg

    [docker-ce-nightly-source]
    name=Docker CE Nightly - Sources
    baseurl=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/7/source/nightly
    enabled=0
    gpgcheck=1
    gpgkey=https://mirrors.ustc.edu.cn/docker-ce/linux/centos/gpg
  4. 问题:sudo yum install docker-ce提示如下

    1
    Delta RPMs disabled because /usr/bin/applydeltarpm not installed.

    解决:

    1
    2
    yum provides '*/applydeltarpm'
    yum install deltarpm
  5. 问题docker structure needs cleaning

    解决:docker system prune -a

  6. 问题设置daemo.json中hosts远程tcp连接时,不能启动

    解决:vim /lib/systemd/system/docker.service

    1
    2
    3
    ExecStart=/usr/bin/dockerd -H fd://
    #修改为
    ExecStart=/usr/bin/dockerd

    然后重载配置systemctl daemon-reload

    重启docker服务systemctl restart docker.service

    原因:冲突和hosts