Docker常用命令

Docker 安装(Centos7为例)

官方文档:https://docs.docker.com/engine/install/centos/

yum安装gcc相关环境

yum -y install gcc

yum -y install gcc-c++

卸载旧版本

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

从仓库安装

#需要的安装包
yum install -y yum-utils
#设置镜像的源地址
yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo   #官方默认的源地址,国内使用慢,可替换阿里云地址

#设置国内镜像的源地址
yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo    #阿里云源地址
#更新yum软件包索引
$ yum makecache fast
 #安装ce社区版, 社区版客户端, 容器
$ yum install docker-ce docker-ce-cli containerd.io

#启动docker
$ systemctl start docker
#测试docker是否安装成功!
$ docker run hello-world

image.png

阿里云镜像加速

.....略,可参考阿里云上镜像服务设置即可!

Docker常用命令

docker version         #显示docker版本信息
docker info            #显示docker详细信息
docker 命令  --help     #帮助命令

官方帮助文档:https://docs.docker.com/engine/reference/commandline/docker/

镜像命令

列出镜像

docker images

#显示已下载的所有镜像
[root@Docker docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED             SIZE
diytomcat     1.10      439abadd75ea   About an hour ago   713MB
mysql         5.7       2fb283157d3c   4 days ago          449MB
hello-world   latest    d1165f221234   2 weeks ago         13.3kB
centos        latest    300e315adb2f   3 months ago        209MB

#REPOSITORY 镜像仓库源
#TAG        镜像的标签
#IMAGE ID   镜像的ID
#CREATED    镜像创建时间
#SIZE       镜像的大小

拉取镜像

docker pull

#下载镜像 docker pull 镜像名[:TAG]
[root@Docker docker]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
6f28985ad184: Already exists 
e7cd18945cf6: Already exists 
ee91068b9313: Already exists 
b4efa1a4f93b: Already exists 
f220edfa5893: Already exists 
74a27d3460f8: Already exists 
2e11e23b7542: Already exists 
fbce32c99761: Pull complete 
08545fb3966f: Pull complete 
5b9c076841dc: Pull complete 
ef8b369352ae: Pull complete 
ebd210f0917d: Pull complete 
Digest: sha256:5d1d733f32c28d47061e9d5c2b1fb49b4628c4432901632a70019ec950eda491
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest

删除镜像

docker rmi

#docker rmi 删除镜像
[root@Docker docker]# docker rmi 镜像id                    #删除指定容器
[root@Docker docker]# docker rmi -f $(docker images -aq)  #删除所有镜像
[root@Docker docker]# docker rmi 镜像id 镜像id 镜像id       #删除多个镜像
#删除指定容器
[root@Docker docker]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
diytomcat     1.10      439abadd75ea   2 hours ago    713MB
mysql         5.7       2fb283157d3c   4 days ago     449MB
mysql         latest    26d0ac143221   4 days ago     546MB
hello-world   latest    d1165f221234   2 weeks ago    13.3kB
centos        latest    300e315adb2f   3 months ago   209MB
[root@Docker docker]# docker rmi 439abadd75ea
Untagged: diytomcat:1.10
Deleted: sha256:439abadd75eae2b0258185aa80a2ed17887fa50656dcc7ef55cc0d987d61ab8a
Deleted: sha256:f7d4b3f954779391f1ab59cc05c7cbb362c3639853d6d5c323840b13a80358d4
Deleted: sha256:a7fda47e150aa6c52c4f682bb5dac823b4c29a4b8ea9902364a93276f192ef8f
Deleted: sha256:a97a36377ce64f87963419f9500a63ef4e76930374aca8ab9ac26284b90ba608
Deleted: sha256:27446ac871797ca9cb2818300da9c7ad143ad44900d144a331c590bbb6ef04d7
Deleted: sha256:c99f106dfe0d32a23d068207da1a3a8e4044c4f9834941d52acbfd63ce0b01bc
Deleted: sha256:3ac8669969cda8c63711002f83406a67c88f6137f273651cab37a424b1ffcbb5
Deleted: sha256:31fe38b240803bc6e86f7964bb38abaed117912a4c0af0c1ea9a2789fd4c249f
Deleted: sha256:66111a94433c2aed70a484284bb81b03a3044c8b4543052f1c56aaa3c7d95f63
Deleted: sha256:4fdf88646c215348b419d3b0a72e806db2b71d253557ef17233d8c50ac868f31
Deleted: sha256:6f3abea69bd295f85eda8402ae786d3ebcab1ba217ea7d5e81229934e35700a6
Deleted: sha256:6233a0aa03c9049a1a0e81a651ad7d0e4b1de2de67ec293076b7e56e956d8f85
Deleted: sha256:964a5017df73a7560130ab19ca94cc0ae5f9ebc61ed884161f61b7cf06d15f32
Deleted: sha256:e6e21c7b0144568d32ed777f03d26c34fe7a21022a92070be48fe3d9e585d4ba
Deleted: sha256:56ef332d3976287728d7d3ea4a100e57ca2c453ef48fa8ff78da4df4c06eacf0
Deleted: sha256:c52ca2724af20549404df82c70f6c429bc8eb451ba265bad2c52d59c9ebc9c13
Deleted: sha256:a077f831425f8b52c80dbc60f2be0560b32d7ae29289b2b4faeeb7e341932161
Deleted: sha256:be33ca1667e70ef00f316b52f7504b85c76f1e392e819786dddb2bd3fa6e0c4a
Deleted: sha256:b9addcf4784e026c0efebdf0e6c540a264e15d100bd5aa84c2c8b66a8c9b0b4c
Deleted: sha256:f8fa71576bc755d57f0872dcdc9f562799a00dfc01e09806c0bd00c8a0900eb9
Deleted: sha256:bd6e1b22922f6778605a11cf3904ee5bb85773d356714f2440ace0d4c25f07a5
[root@Docker docker]# 
提交镜像
#commit
#docker Hub的镜像基本是阉割版的,某些功能可能不全,所以需要制定自己的镜像
docker commit -a="作者" -m="描述信息" 容器id 新镜像名:TAG                           #新镜像名的TAG是必须要的

容器命令

说明:我们有了镜像才可以创建容器!

运行容器

docker run

docker run [可选参数] image

#参数说明:
--name="name"    容器名称
-d               后台运行
-it              交互方式运行,进入容器查看内容 
-p               指定端口映射  -p 8081:8080  宿机端口:容器端口
-P                随机指定端口

#-d方式启动后自动退出到宿机
[root@Docker docker]# docker run -d --name centos01 -P centos
67027aa52a8f6bc0fc0aeecd2075da11182d7fcbc25028e0c399ecafab3c0c76
[root@Docker docker]#
#-it方式启动后自动进入到容器
[root@Docker docker]# docker run -it --name centos02 -P centos
[root@a1dc01db0458 /]# 
进入容器

docker exec

#启动新窗口进入容器
[root@Docker docker]# docker exec -it 容器id /bin/bash
[root@a1dc01db0458 /]#

docker attach

#不启动新窗口进入容器
[root@Docker docker]# docker attach 容器id
[root@a1dc01db0458 /]#
列出容器
#列出正在运行的容器
-a     #列出所有的容器,包含历史运行容器
-n=?     #列出最近创建的容器
-q      #只显示容器的编号
[root@Docker docker]# docker ps [可选参数]
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS          PORTS     NAMES
a1dc01db0458   centos    "/bin/bash"   11 minutes ago   Up 11 minutes             centos02
退出容器
exit      #容器停止并退出容器
Ctrl+p+q   #容器不停止退出

[root@Docker docker]# docker exec -it 容器id /bin/bash
[root@a1dc01db0458 /]# exit
exit
[root@Docker docker]# 
删除容器
[root@Docker docker]# docker rm 容器id                        #删除指定容器
[root@Docker docker]# docker rm -f $(docker ps -aq)          #删除所有容器
启动和停止容器
docker start 容器id       #启动容器
docker restart 容器id     #重启容器
docker stop 容器id        #停止正在运行的容器
docker kill 容器id        #强制停止当前容器
后台启动问题

常见问题:docker容器使用后台启动运行,就必须需要有一个前台进程,docker发现没有应用,就会自动停止容器

例:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了。

其他命令
查看日志
docker logs -f -t --tail 10 容器id #查看最近10条的日志
查看容器中的进程信息
docker top 容器id                 #显示容器的进程信息
查看镜像元数据
docker inspect 容器id
数据拷贝
docker cp 容器id:/home/docker/test.java /home                       #将容器内的text.java 拷贝到宿机的home目录下

容器数据卷

方式一: 使用-v 直接挂载

docker run -it -v 宿机路径:容器内路径
docker run -it -v /home/docker:/home --name centos01 centos /bin/bash          #将容器的home目录挂载到宿机的home/docker目录下

Dockerfile

Docker网络


Docker集群

Docker Compose

简介:

Compose是Docker官方的开源项目,需要安装!

Compose 是一个定义和运行多个容器应用的工具,Compose可以用YAML文件去配置应用的服务,使用命令从配置文件中启动服务!

Compose安装

curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose                                  #github 下载较慢,可以使用国内地址下载


curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose                                          #国内Compose下载路径   



chmod +x /usr/local/bin/docker-compose                                      #compose默认没有执行权限,赋权动作

ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose                 #创建软链接,让任何目录可以使用docker-compose命令



官方使用实例

  1. Create a directory for the project:
$ mkdir composetest
$ cd composetest
  1. Create a file called app.py in your project directory and paste this in:
import time

import redis
from flask import Flask

app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)

def get_hit_count():
    retries = 5
    while True:
        try:
            return cache.incr('hits')
        except redis.exceptions.ConnectionError as exc:
            if retries == 0:
                raise exc
            retries -= 1
            time.sleep(0.5)

@app.route('/')
def hello():
    count = get_hit_count()
    return 'Hello World! I have been seen {} times.\n'.format(count)
  1. Create another file called requirements.txt in your project directory and paste this in:

    flask
    redis
    
  2. Create a Dockerfile

FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
  1. Create a file called docker-compose.yml in your project directory and paste the following:
version: "3"
services:
  web:
    build: .
    ports:
      - "5000:5000"
  redis:
    image: "redis:alpine"
  1. start up your application by running docker-compose up
docker-compose up
image.png

*出现如上错误,使用Docker-compose build 后再up

yaml规则

#3层


version:''   #版本

services:     #服务
    服务1:web
        #服务配置
        image
        build
        network
        ...
    服务2:Redis
    ....
    服务3:redis
    ...
#其他配置 网络/卷/全局规则

volumes:
network:
configs:
image.png
**Depends_on 表示服务的启动顺序**

Docker Swarm

未完待续。。。。。

你可能感兴趣的:(Docker常用命令)