docker学习的一些简单总结(Ubuntu)

Docker

1.安装步骤(Ubuntu):
首先检查主机内核(版本要高于3.10):

uname -r

安装docker:

sudo apt-get install -y docker.io

(sudo su 切换到root用户操作)

验证docker是否启动

systemctl status docker

启动docker:

systemctl  start docker

开机启动docker

systemctl enable docker 

启动的配置文件在 /etc/default/docker

查看docker是否已经启动

ps aux | grep docker

查看镜像:

docker images

下载镜像(有网的情况,去镜像库中下载)

docker pull [镜像]

切换阿里云镜像

扫描二维码关注公众号,回复: 5754166 查看本文章
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://j7itktkw.mirror.aliyuncs.com"]
}
EOF

#重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

###此步(修改为阿里云镜像)还可以用vim命令写入

vi /etc/docker/daemon.json

然后跳转到编辑页面
插入

{
  "registry-mirrors": ["https://j7itktkw.mirror.aliyuncs.com"]
}

注释: vim编辑页面保存退出:
首先 按esc --》再输入冒号 : 然后 输入 q 退出
或者 按了ESC后,直接按shift+zz,或者切换到大写模式按ZZ,就可以保存退出了, 即是按2次大写的Z。

#查看文件

cat  /etc/docker/daemon.json

创建docker用户(Ubuntu自己yoghurt不能操作daocker)

sudo usermod -a -G docker [用户名]

切换到docker用户名下

sudo su -l [用户名]

2.镜像

运行hello-word 这个镜像(如果镜像不存在,就从云镜像中找,并下载且运行)

docker run hello-world

列出已经下载的镜像

docker image ls

(同上 dockers images
在这里插入图片描述
REPOSITORY:表示镜像的仓库源
TAG:镜像的标签
IMAGE ID:镜像ID
CREATED:镜像创建时间
SIZE:镜像大小

移除镜像
docker image rm <image id> # Remove specified image from this machine
docker image rm $(docker image ls -a -q) # Remove all images from this machine

创建镜像:
前提:必须有建镜像的配置文件,进入(cd)配置文件(Dockerfile)的同级目录下。

docker build --tag= [镜像名]:[版本号] .
docker build -t= [镜像名]:[版本号] .

例:创建friendlyhello容器版本v0.0.1

docker build --tag=friendlyhello:v0.0.1 .
docker build -t=friendlyhello:v0.0.1 .

注:tag前边是两个“-”,t前边是一个“-”。 命令后有一个英文的句号“.”。
-t :指定要创建的目标镜像名 . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

Dockerfile文件创建镜像(官网的一个小例子)
Dockerfile 中的主要标签

  • FROM image的来源
  • WORKDIR 指定工作路径
  • COPY . /app 将当前目录下的所有文件(除了.dockerignore排除的路径),都拷贝进入 image 文件的/app目录。
  • RUN 生成image是执行。可以包含多个RUN命令
  • EXPOSE 80 将容器 80 端口暴露出来, 允许外部连接这个端口。如不指定会随机指 定一个端口
  • ENV 定义环境
  • CMD 运行容器的时候执行。只能有一个。

其中配置文件Dockerfile ,app.py,requirements.txt
Dockerfile文件

# Use an official Python runtime as a parent image
FROM python:2.7-slim
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Make port 80 available to the world outside this container
EXPOSE 80
# Define environment variable
ENV NAME World
# Run app.py when the container launches
CMD ["python", "app.py"]

app.py

from flask import Flask
from redis import Redis, RedisError
import os
import socket
# Connect to Redis
redis = Redis(host="redis", db=0, socket_connect_timeout=2, socket_timeout=2)
app = Flask(__name__)
@app.route("/")
def hello():
    try:
        visits = redis.incr("counter")
    except RedisError:
        visits = "<i>cannot connect to Redis, counter disabled</i>"

    html = "<h3>Hello {name}!</h3>" \
           "<b>Hostname:</b> {hostname}<br/>" \
           "<b>Visits:</b> {visits}"
    return html.format(name=os.getenv("NAME", "world"), hostname=socket.gethostname(), visits=visits)
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=80)

requirements.txt

Flask
Redis

生成镜像,以上三个文件全部放在同一个文件目录下,进入文件的工作目录
运行 docker build -t=friendlyhello .

生成friendlyhello镜像,
运行镜像

dockers run -p 4000:80 friendlyhello

浏览打开网址

http://localhost:4000

在这里插入图片描述

3 容器

运行image生成container:

docker run [镜像名]

例:

dockers run -p 4000:80 friendlyhello

注 (1)4000是本地机器链接的端口,此接口可以根据本地机器空闲端口选择;
80是docker内部和本地链接的端口,在配置文件中已经写好。
(2)docker run -d -p 4000:80 [镜像名]
此命令行和上句作用一样,运行容器后返回运行容器id被踢出退回终端,容器正常运行。 还可以指定登录ip
docker run -d -p 127.1.1.1:4000:80 [镜像名]
(3)查看正在运行的容器
docker ps docker container ls docker container ls -a 列出所有的容器列表
docker container ls -a -q 列出所有容器的ID(只有运行过的容器ID就会存在)
docker container ls --all 列出容器的状态信息
(4)移除容器
docker container rm [容器id/容器名] 只能移除已经运行结束的容器,
docker container rm [容器id1/容器名1] [容器id2/容器名2] …
上句等同于 docker container rm $(docker container ls -a > -q)
(5)查看容器的端口
docker container port [容器id/容器名] 正在运行的容器
docker container top [容器id/容器名] 查看容器进行
(6)查看 Docker 的底层信息,返回一个 JSON 文件记录着 Docker 容器的配置和状态信息 docker inspect [容器id/容器名]

停止正在运行的容器:

docker container stop  [容器id/容器名]
docker container kill [容器id/容器名]    暴力杀死此容器

docker exec来进入到到该容器中,或者attach重新连接容器的会话

docker exec [containerID]

启动容器

docker container start [containerID]

查询正在运行的容器命令:docker container ls

查看容器输出

docker container logs [containerID]

拷贝正在运行容器的文件到本地主机的指定目录

docker container cp [containID]:[/path/to/file] .

镜像变成容器

docker commit <container> [repo:tag]

登录docker官网镜像

docker login

注: 输入账户和密码

账户:自己注册的账户
密码:自己的

镜像的上传
上传image
1 生成标签tag

docker tag image username/repository:tag

例如:docker tag friendlyhello zhangkang1228/first:n1
2 上传

docker push username/repository:tag

例如:docker push zhaokang1228/first:n1

查找镜像(镜像库中网上)

docker search 镜像名

例如: docker search httpd

NAME:镜像仓库源的名称
DESCRIPTION:镜像的描述
OFFICIAL:是否docker官方发布

列出stacks或者apps
docker stack ls # List stacks or apps

启动stack通过compose文件

docker stack deploy -c <composefile> <appname>  # Run the specified Compose file

例子: docker stack deploy -c docker_compose.yml getstartlab
其中docker-copmose.yml是compose文件
getstartlab 是app名

[注],如果运行后重新执行是更新对应名字的app

docker service ls                 # List running services associated with an app
docker service ps <service>                  # List tasks associated with an app

检查任务或者容器

docker inspect <task or container>                   # Inspect task or container
docker container ls -q                                      # List container IDs
docker stack rm <appname>                             # Tear down an application

docker swarm leave --force      # Take down a single node swarm from the manager

4 本地镜像下载导入

镜像(image)下载:(自己的docker,在没有网络的情况下,用于U盘传输)

docker save [容器id]> /path/文件名.tar

例如:docker save eb40dcf64078> /home/kaka/mydjango-save-1016.tar

镜像(image)加载到本地docker

docker load < /path/文件名.tar

例:docker load < /home/kaka/mydjango-save-1016.tar

docker image ls 后发现镜像(image)仓库源和版本都为空

用docker tag [镜像id] 镜像名:版本号

猜你喜欢

转载自blog.csdn.net/weixin_43255962/article/details/88529207