Docker基本命令

Docker

一、Docker简介

Docker 是一个开源的应用容器引擎,基于Go 语言并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)更重要的是容器性能开销极低。

Docker支持将软件编译成镜像;在镜像中支持各种软件配置好并发布,其他使用者可以直接使用配置好的镜像。运行中的镜像称之为容器,容器启动速度很快。类似于封装好的Windows系统,通过U盘直接安装即可,不需要进行系统配置软件

Docker的应用场景:

  • Web应用的自动化打包发布;
  • 自动化测试和持续集成、发布;
  • 在服务型环境中部署调整数据库或其他的后台应用;
  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

Docker的优点:

  • 快速、一致性的交付应用程序
  • 响应式部署和扩展
  • 充分利用虚拟机资源

二、Docker核心概念

Docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统中)

Docker客户端(Client):连接Docker主机进行操作;

Docker容器(Container):镜像启动后的实例,独立运行的一个或一组应用;

Docker镜像(Image):打包好的软件,用于创建Docker容器的模板;

Docker仓库(Respository):用于保存打包好的软件镜像;

关系示意图:

img

Docker的基本使用方式:

① 在机器中安装Docker;

② 在Docker仓库中寻找这个软件对应的镜像;

③ 使用Docker运行镜像,生成一个Docker容器;

④ 容器的启动或停止相当于对软件的启动和停止;

三、Docker的搭建

Docker版本要求

1、要求 CentOs7 系统的内核版本高于 3.10,可通过如下指令查看版本

uname -r

更新yum

安装docker ce即社区免费版,先安装必要的软件包,安装yum-utils,它提供一个yum-config-manager单元,同时安装的device-mapper-persistent-data和lvm2用于储存设备映射(devicemapper)必须的两个软件包。

1 sudo yum update
2 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 

紧接着配置一个稳定(stable)的仓库 ,仓库配置会保存到/etc/yum.repos.d/docker-ce.repo文件中。此处我们使用阿里云。

sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新Yum安装的相关Docke软件包

sudo yum makecache fast#会出错

出现如下错误:

yum makecache: error: argument timer: invalid choice: ‘fast’ (choose from ‘timer’)

image-20200716140235904

更新索引的时候出错,即centos8没有该参数,解决办法为:去掉fast参数

image-20200716140315300

查看仓库版本,并指定版本安装

查看版本

yum list docker-ce --showduplicates | sort -r

安装


卸载:
yum list installed | grep docker
yum remove 移除需要卸载的组件

出现如下错误: Problem: package docker-ce-3:18.09.9-3.el7.x86_64 requires containerd.io >= 1.2.2-3, but none of the providers can be installed

image-20200716140735067

根据提示,需要containerd.io的版本 >= 1.2.2-3,操作如下

也有可能出现此错误

image-20210125133644001

解决方式yum erase podman buildah

(1)安装wget指令

yum install wget

(2)获取rpm包

wget http://docker-release-purple-prod.s3-website-us-east-1.amazonaws.com/linux/centos/8/x86_64/edge/Packages/containerd.io-1.3.7-3.1.el8.x86_64.rpm

(3)升级containerd.io(安装rpm包)

yum -y install containerd.io-1.2.6-3.3.el7.x86_64.rpm

(4)重新安装docker-ce

yum install docker-ce

image-20200716141504940

Doker info命令出现的问题:

执行docker info出现如下警告

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

解决办法:

vi /etc/sysctl.conf

添加以下内容

net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

最后再执行

sysctl -p

=------------------------------------------------
docker not found
export DOCKER_PATH="/Applications/Docker.app/Contents/Resources/bin"
export PATH=".\$PATH:$DOCKER_PATH"
执行docker info出现如下警告 WARNING: bridge-nf-call-iptables is disabled WARNING: bridge-nf-call-ip6tables is disabled 解决办法: vi /etc/sysctl.conf 添加以下内容 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 最后再执行 sysctl -p docker not found export DOCKER_PATH="/Applications/Docker.app/Contents/Resources/bin" export PATH=".\$PATH:$DOCKER_PATH" 

启动docker

(1)设置开机自启动

sudo systemctl start docker
sudo systemctl enable docker

(2)启动

sudo systemctl start docker

(3)验证

docker version

docker5.png 说明安装成功

或者


sudo docker ps

docker6.png

说明安装成功

(4)查看docker运行状态


systemctl status docker

docker7.png

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine

rm -rf /etc/systemd/system/docker.service.d

rm -rf /var/lib/docker

rm -rf /var/run/docker

四、Docker常用的命令

拉取镜像

docker pull busybox

拉取镜像慢,配置加载镜像地址
“registry-mirrors”: [
https://ebkn7ykm.mirror.aliyuncs.com",
”https://docker.mirrors.ustc.edu.cn“,
”http://f1361db2.m.daocloud.io“,
”https://registry.docker-cn.com"
]

首次启动镜像


docker run -d --name busybox-first busybox
-d 代表后台运行容器

docker run -it --name busybox-test busybox sh

参数说明:

  • -i: 交互式操作。
  • -t: 终端。
  • -p:端口。
  • -ip:指定IP。
  • -v:数据卷。例如:-v /data:/data:ro。ro为容器只读。
  • –volumes-from:数据卷来自于已有的容器。
  • -name:容器名。
  • busybox 镜像。
  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

启动已存在容器


docker start <容器 ID/Name>
docker restart 容器id1 [容器id2] [...]  #重启

运行的docker容器列表


docker ps # 查看正在运行的容器列表
docker ps –a # 所有容器列表(包含存活和退出容器)

停止容器

docker stop <容器 ID/Name>

进入容器

docker exec -it 容器ID/容器别名称 /bin/bash

从这个容器退出,不会导致容器的停止,推荐大家使用

查看容器的某些进程PID


doker top name

删除容器

docker rm name

镜像列表

docker images

启动所有容器

docker start $(docker ps -a -q)

复制文件到容器

docker cp sentinel.conf redis-master:/usr/local/redis

创建容器时指定IP

Docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定。

在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的。

我们可以创建自己的bridge网络 : mynet,创建容器的时候指定网络为mynet并指定ip即可。

查看网络模式

docker network ls

创建一个新的bridge网络

docker network create --driver bridge --subnet=172.19.0.0/16 --gateway=172.19.0.1 dockercompose

查看网络信息

docker network inspect dockercompose

创建容器并指定容器ip

docker run -it --name nginx-second --network=dockercompose --ip 172.19.0.6 nginx
# 验证是否固定
docker insepect 容器ID | grep "IpAddress"
"SecondaryIPAddresses": null,
            "IPAddress": "",
                    "IPAddress": "172.19.0.6",

创建快照

查看现有容器
docker ps/docker ps -a
创建容器快照
docker export ID > test.tar
导入并验证
cat dd.tar | docker import - test1:latest

docker run -it ID(镜像) /bin/bash

---------------- 运行报错 ------------------
docker run 有问题

查看数据卷相关信息

docker inspect -f {{.Volumes}} 容器名

构建容器(nginx为例)

一、手动构建

1、拉取镜像
docker pull centos
2、启动镜像
docker run --name nginx-man -it centos
3、安装相关依赖包
yum install -y wget gcc gcc-c++ make openssl-devel
4、安装nginx依赖

wget http://nginx.org/download/nginx-1.9.3.tar.gz
mv nginx-1.9.3.tar.gz /usr/local/data/nginx-1.9.3.tar.gz
cd /usr/local/data
5、解压
tar -zxf nginx-1.9.3.tar.gz
6、创建www用户
useradd -s /sbin/nologin -M www
7、启动nginx
./configure --prefix=/usr/local/data/nginx --user=www --group=www --with-http_ssl_moudle --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.37
8、make

make
make install
9、配置启动容器直接运行nginx

vi /usr/local/data/nginx/conf/nginx.conf
#添加,让其在前台运行
daemon off;
10、验证

exit#退出容器
docker commit -m "my nginx" 容器ID my-nginx1:vl
doker images
#发现已经有了新镜像
docker run -it -p 92:80 my-nginx1:v1 /usr/local/data/nginx/sbin/nginx
#可以循环添加想要的容器数量
在浏览器打开IP:92
可以看到nginx
11、容器自启
docker container update --restart=always 容器名

附录:

Gitlab安装


docker pull twang2218/gitlab-ce-zh

version: '3'
services:
   web:
     image: 'twang2218/gitlab-ce-zh'   #gitlab镜像
     restart: always
     privileged: true  #权限
     hostname: '192.168.3.249'       #主机名,即虚拟机的ip
     environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
            external_url 'http://192.168.3.249' #主机名,即虚拟机的ip
            gitlab_rails['gitlab_shell_ssh_port'] = 2222
            unicorn['port'] = 8888
            nginx['listen_port'] = 8084
     ports:
        - '8084:8084'
        - '8443:443'
        - '2222:22'
     volumes:
        - './config:/etc/gitlab'
        - './logs:/var/log/gitlab'
        - './data:/var/opt/gitlab'
posted @ 2022-03-11 21:48  libing-zhang  阅读(149)  评论(0编辑  收藏  举报