D

Docker镜像安装容器使用

HB 网络电脑 2022-06-18

1 配置镜像加速器
国内从Docker Hub拉去镜像会遇到困呐,通过配置国内镜像加速器。
由于镜像服务可能出现宕机,建议同时配置多个镜像。各个镜像站测试结果请到 docker-practice/docker-registry-cn-mirror-test 查看。

以网易云镜像服务 https://hub-mirror.c.163.com 为例进行介绍。

请首先执行以下命令,查看是否在 docker.service 文件中配置过镜像地址。

systemctl cat docker | grep ‘–registry-mirror’

如果该命令有输出,那么请执行 systemctl cat docker 查看 ExecStart= 出现的位置,修改对应的文件内容去掉 --registry-mirror 参数及其值,并按接下来的步骤进行配置。

如果以上命令没有任何输出,那么就可以在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件):

{
"registry-mirrors": [
"https://ung2thfc.mirror.aliyuncs.com",
"https://registry.docker-cn.com",
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://docker.mirrors.ustc.edu.cn"
]
}

添加后重新加载 daemon.json 脚本文件、重启docker、再 docker info 测试一下:

systemctl daemon-reload
systemctl restart docker
docker info

如下显示就正常了:

docker info

2 镜像和容器生存操作
2.1 镜像

docker images ls #查看镜像
docker rmi centos:latest #删除镜像

【批量删除镜像】
删除所有仓库名为 redis 的镜像:
docker image rm $(docker image ls -q redis) # 可以使用 docker image ls -q 来配合使用 docker image rm,这样可以成批的删除希望删除的镜像。

2.2 容器

sudo docker ps #查看正在运行的容器

创建容器:sudo docker run [参数列表] 使用的镜像名称或ID /bin/bash

sudo docker run -it --name=mycentos7_inter centos /bin/bash     # 创建容器
sudo docker rm mycentos7_inter  # 删除之前为容器创建的名称
exit # 退出容器进入Linux宿主机
sudo docker exec -it container_name (或者 container_id) /bin/bash     #重新进入容器

停止与启动容器:

sudo docker stop mycentos7_daemon     #停止正在运行的容器:docker stop 容器名称或者ID
sudo docker start mycentos7_daemon    #启动已运行过的容器
sudo docker restart ...

后台运行容器

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。
如果不使用 -d 参数运行容器。

docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"hello world
hello world
hello world
hello world

容器会把输出的结果 (STDOUT) 打印到宿主机上面

如果使用了 -d 参数运行容器。

docker run -d ubuntu:18.04 /bin/sh -c “while true; do echo hello world; sleep 1; done”
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a

此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。

使用-d启动容器后,会回到host终端;此时如果想要获取容器的输出信息,可以通过 docker container logs 命令。

docker container logs [container ID or NAMES]hello world
hello world
hello world

进入容器–exec

sudo docker exec -it nginx-test /bin/bash

在使用 -d 参数时,容器启动后会进入后台,启动完容器之后会停在host端;某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令,推荐大家使用 docker exec 命令。

只用 -i 参数时,由于没有分配伪终端,界面没有我们熟悉的 Linux 命令提示符,但命令执行结果仍然可以返回。当 -i -t 参数一起使用时,则可以看到我们熟悉的 Linux 命令提示符。

【实例】

docker run -dit ubuntu69d137adef7a8a689cbcb059e94da5489d3cddd240ff675c640c8d96e84fe1f6

docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES69d137adef7a       ubuntu:latest       "/bin/bash"         18 seconds ago      Up 17 seconds                           zealous_swirles

docker exec -i 69d1 bash
ls
bin
boot
dev... docker exec -it 69d1 bash
root@69d137adef7a:/#

删除容器:可以使用 docker container rm 来删除一个处于终止状态的容器,加-f参数强行删除。
批量删除所有已经退出的容器

docker rm -v $(docker ps -aq -f status=exited)

导出容器:

docker container ls -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES7691a814370e        ubuntu:18.04        "/bin/bash"         36 hours ago        Exited (0) 21 hours ago                       test
docker export 7691a814370e > ubuntu.tar    #到处容器快照到本地文件

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,例如

cat ubuntu.tar | docker import - test/ubuntu:v1.0$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED              VIRTUAL SIZE
test/ubuntu         v1.0                9d37a6082e97        About a minute ago   171.3 MB

3 容器部署应用
docker安装部署:https://www.runoob.com/docker/docker-install-nginx.html
在Docker容器中 部署应用程序,就相当于是安装软件。

以安装MySQL、nginx为例:

3.1 MySQL容器部署

# 搜索一下mysql有哪些镜像
sudo docker search mysql
拉取镜像

# Linux宿主机中操作:拉取MySQL的镜像,如果有了就不需要再拉取了

sudo docker pull centos/mysql-57-centos7  #这个换成自己的

创建容器

# Linux宿主机中操作:使用镜像创建mysql守护式容器,并进行端口映射,同时配置环境变量
sudo docker run -di --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql

参数说明:
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,就是创建交互式容器了。)。

-i:表示运行容器

–name :为创建的容器命名。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 容器中的MySQL的root用户密码,作为root用户远程登陆之用

交互操作容器中的MySQL

# 登录进容器
sudo docker exec -it mysql /bin/bash

登录容器里面的mysql,登录后,默认使用的是容器的root用户

mysql -u root -p        # 在容器中使用root用户登录的话,不需要输入密码,密码写为空

参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

后台运行容器

更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。
如果不使用 -d 参数运行容器。

docker run ubuntu:18.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"hello world
hello world
hello world
hello world

容器会把输出的结果 (STDOUT) 打印到宿主机上面

如果使用了 -d 参数运行容器。

docker run -d ubuntu:18.04 /bin/sh -c “while true; do echo hello world; sleep 1; done”
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a

此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。

使用-d启动容器后,会回到host终端;此时如果想要获取容器的输出信息,可以通过 docker container logs 命令。

docker container logs [container ID or NAMES]hello world
hello world
hello world

测试安装成功

3.2 安装Nginx

安装镜像

选取安装版本;

docker pull nginx:latest

运行容器

安装完成后,我们可以使用以下命令来运行 nginx 容器:

docker run --name nginx-test -p 8080:80 -d nginx

参数说明:
–name nginx-test:容器名称。
-p 8080:80: 端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。

交互操作

sudo docker exec -it nginx-test /bin/bash

docker常用操作

# 已安装镜像列表
docker images

# 查看运行的容器
docker ps

# 查看所有容器包括未运行的容器
docker ps -a

# 停止运行中的xxx容器
docker stop xxx # xxx可以是容器ID前3位数或容器名

# 删除xxx容器
docker rm xxx # xxx可以是容器ID前3位数或容器名

# 强行删除运行中的xxx容器
docker rm -f xxx # xxx可以是容器ID前3位数或容器名

# 删除xxx镜像
docker rmi xxx
PREV
LNMP一键安装包
NEXT
armbian 设置 lnmp

评论(0)

发布评论