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
如下显示就正常了:
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