已有容器apk方式安装chrome和 chrome-driver

[lwptoc]

要在容器中通过APK方式安装Chrome和ChromeDriver,您可以按照以下步骤进行操作。这些步骤假定您使用的是Alpine Linux,因为Alpine使用APK包管理工具。

1. 设置Alpine Linux容器

首先,确保您已经运行了Alpine Linux容器。如果没有,可以使用以下命令拉取并运行Alpine Linux容器:

docker run -it alpine:latest /bin/sh

2. 更新APK包索引

在容器中,首先更新APK包索引:

apk updateapk update

3. 安装Chrome

由于Alpine Linux是基于musl libc而不是glibc,因此Google Chrome没有直接为其提供预编译的包。我们可以使用Chromium,这是一个开源的Chrome版本,可以在Alpine上安装。

apk add chromium

4. 安装ChromeDriver

与Chrome一样,ChromeDriver也没有为Alpine Linux直接提供预编译包。我们可以从Chromium项目中获取与Chromium兼容的ChromeDriver。

apk add chromium-chromedriver

5. 验证安装

安装完成后,您可以验证Chrome和ChromeDriver是否安装成功。

chromium-browser --version
chromedriver --version

 

docker重启后ip会变吗

第一次用docker容器,创建了两个容器,做好mysql的主从配置了,重启docker容器之后,发现容器的ip地址变了,这就尴尬了,首先了解到了docker默认采用”bridge”连接,启动容器的时候会按照顺序来获取ip。这就导致启动时候ip不固定的问题,

默认情况下启动、创建容器都是用该模式,所以每次docker容器重启时会按照顺序获取对应ip地址,这就导致容器每次重启,ip都发生变化

下面创建自定义网络来解决这个IP不固定的问题,

1.创建自定义网络,指定网段172.17.0.0/16

2.创建容器

docker run -itd –name mysql-master-172.19.0.103 –net bindIpNetwork –ip 172.19.0.103 centos:latest /usr/sbin/init

 

(注意:这里创建的时候复制的命令,原本计划是103上是mysql的slave,所以我通过rename改下名字,命令为: docker rename mysql-master-172.19.0.103 mysql-slave-172.19.0.103

)

3.查看两个容器IP:

重启之后查看

docker安装Mysql5.7以及远程登陆链接配置

1.安装mysql5.7 docker镜像

docker安装:docker安装一条龙

1、拉取官方mysql5.7镜像

docker pull mysql:5.7
root@VM-12-5-ubuntu:/# docker pull mysql:5.7
5.7: Pulling from library/mysql
ffbb094f4f9e: Pull complete
df186527fc46: Pull complete
fa362a6aa7bd: Pull complete
5af7cb1a200e: Pull complete
949da226cc6d: Pull complete
bce007079ee9: Pull complete
eab9f076e5a3: Pull complete
c7b24c3f27af: Pull complete
6fc26ff6705a: Pull complete
bec5cdb5e7f7: Pull complete
6c1cb25f7525: Pull complete
Digest: sha256:d1cc87a3bd5dc07defc837bc9084f748a130606ff41923f46dec1986e0dc828d
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
root@VM-12-5-ubuntu:/#

3、查看镜像库

docker images
root@VM-12-5-ubuntu:/# docker images
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
mysql        5.7       738e7101490b   8 days ago   448MB
root@VM-12-5-ubuntu:/#

2.创建mysql容器

1、在本地创建mysql的映射目录

mkdir -p /root/mysql/data /root/mysql/logs /root/mysql/conf

2、在/root/mysql/conf中创建 *.cnf 文件(叫什么都行)

touch my.cnf

3、创建容器,将数据,日志,配置文件映射到本机

docker run -p 3306:3306 --name mysql -v /root/mysql/conf:/etc/mysql/conf.d -v /root/mysql/logs:/logs -v /root/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

-d: 后台运行容器

-p 将容器的端口映射到本机的端口

-v 将主机目录挂载到容器的目录

-e 设置参数

4、启动mysql容器(一般是停止过后)

docker start mysql

5、查看/root/mysql/data目录是否有数据文件

root@VM-12-5-ubuntu:~/mysql/conf# ls /root/mysql/data/
auto.cnf    ca.pem           client-key.pem  ibdata1      ib_logfile1  mysql               private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile0  ibtmp1       performance_schema  public_key.pem   server-key.pem
root@VM-12-5-ubuntu:~/mysql/conf#

6、服务器注意要开放端口3306
7、mysql允许远程连接(不开启可能会存在连不上的问题)

docker exec -it mysql /bin/bash 或者 docker exec -it 容器ID /bin/bash ## 进入容器

mysql -uroot -p ## 登录myusql,会提示输入密码,输入之前容器初始化的密码即可

## 登录数据库      **修改使用admin登录配置**
mysql> grant all on *.* to admin@'%' identified by 'xxxxxx' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
## 登录数据库        **修改使用root登录配置:root用户记得是 'root'**
mysql> grant all on *.* to 'root'@'%' identified by 'root' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

 

 

修改Docker容器的时间和宿主时间一致

在Docker容器创建好之后,可能会发现容器时间跟宿主机时间不一致

发现两者之间的时间相差了八个小时
宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)
容器采用了UTC时区,UTC应该是指(Coordinated Universal Time,标准时间)

我们需要同步它们的时间,让容器时间跟宿主机时间保持一致。有以下几种方法:

 

方法1:

在创建 Docker 容器时,加上 “-v /etc/localtime:/etc/localtime:ro” 参数,让容器使用宿主机的时间,容器时间与宿主机时间同步。

比如创建一个 Tomcat 容器:

docker run -d -p 8080:8080 –name mytomcat -v /etc/localtime:/etc/localtime:ro tomcat

其中 “-v /etc/localtime:/etc/localtime:ro” 表示让容器使用宿主机的时间时区。

 

方法2:

如果容器已经启动,则进入容器进行修改

#进入容器
docker exec -it <容器ID或者容器NAME> /bin/bash

cd /etc
#备份一下localtime
mv localtime localtime_bak
#替换之前的localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
注意:有可能容器里没有Shanghai这个文件,可以用以下命令,把宿主机的Shanghai文件复制到容器中

docker cp /usr/share/zoneinfo/Asia/Shanghai 容器名称:/usr/share/zoneinfo/Asia
有了Shanghai这个文件后,再执行:cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 

方法3:

把宿主机的localtime文件复制到容器中

docker cp /etc/localtime 容器名:/etc

docker 常用命令

帮助命令

docker version #显示docker的详细信息
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 –help #帮助命令

帮助文档的地址:https://docs.docker.com/engine/reference/commandline/

(以下图片均使用kali系统)

1、镜像命令

docker images 查看所有本地的主机上的镜像

┌──(root㉿kali)-[~]
└─# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 12 months ago 13.3kB
# 解释
REPOSITORY 镜像的仓库源
TAG 版本标签信息
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
# 可选项
-a, –all # 列出所有镜像
-q, –quiet # 只列出镜像的id

docker search 搜索镜像

┌──(root㉿kali)-[~]
└─# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13234 [OK]
mariadb MariaDB Server is a high performing open sou… 5062 [OK]
phpmyadmin phpMyAdmin – A web interface for MySQL and M… 640 [OK]
percona Percona Server is a fork of the MySQL relati… 588 [OK]
# 可选项,通过收藏来过滤
–filter=STARS=5000 #搜索出来的镜像就是STARS大于3000的
┌──(root㉿kali)-[~]
└─# docker search mysql –filter=STARS=5000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13234 [OK]
mariadb MariaDB Server is a high performing open sou… 5062 [OK]

docker pull 下载镜像

# 下载镜像 docker pull 镜像名[:tag]

不是很想下,截一下老师的图哈哈哈

image-20221017212936550

docker rmi 删除镜像

┌──(root㉿kali)-[~]
└─# docker rmi -f 镜像id #1.删除指定的镜像id
┌──(root㉿kali)-[~]
└─# docker rmi -f 镜像id 镜像id 镜像id #2.删除多个镜像id
┌──(root㉿kali)-[~]
└─# docker rmi -f $(docker images -aq) #3.删除全部的镜像id

2、容器命令

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

下载一个centos镜像来测试学习

docker pull centos

新建容器并启动

docker run [可选参数] image
#参数说明
–name=”Name” 容器名字 tomcat01,tomcat02,用来区分容器
–d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P 随机指定端口
# 测试,启动并进入容器
┌──(root㉿kali)-[~]
└─# docker run -it centos /bin/bash
[root@93c15a60f187 /]# ls #查看容器内的centos,基础版本,很多命令不完善
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# 从容器中退回主机
[root@93c15a60f187 /]# exit
exit
┌──(root㉿kali)-[~]
└─#

image-20221017235421425

列出所有的运行的容器

# docker ps 命令
# 列出当前正在运行的容器
-a # 列出当前正在运行的容器+带出历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的编号
┌──(root㉿kali)-[~]
└─# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
┌──(root㉿kali)-[~]
└─# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93c15a60f187 centos “/bin/bash” 7 minutes ago Exited (130) 3 minutes ago funny_jackson
c60fa97d9284 feb5d9fea6a5 “/hello” 4 hours ago Exited (0) 4 hours ago quizzical_pasteur
5ab8620c78f5 medicean/vulapps:s_shiro_1 “/usr/local/tomcat/b…” 2 months ago Exited (143) 2 months ago trusting_mestorf
┌──(root㉿kali)-[~]
└─# docker ps -n=1
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
93c15a60f187 centos “/bin/bash” 14 minutes ago Exited (130) 10 minutes ago funny_jackson
┌──(root㉿kali)-[~]
└─# docker ps -aq
93c15a60f187
c60fa97d9284
5ab8620c78f5

退出容器

exit # 直接容器停止并退出
Ctrl + P + Q # 容器不停止退出

删除容器

docker rm 容器id # 删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm # 删除所有的容器

启动和停止容器的操作

docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止当前正在运行的容器
docker kill 容器id # 强制停止当前容器

测试收尾工作(可有可无)

?遇到的问题

1、如何进入正在运行的容器

因为正在运行的容器无法通过容器id删除,所以衍生出了这个问题

解决方法1:使用docker exec

docker exec 相当于进入容器并开启一个新的终端,可以在里面操作。

如果使用exit退出,容器也不会停止。

帮助信息:

注意:因为exec是开始一个新终端,所以COMMAND是必填项,不能省略。

常用命令(其中容器id是你docker中正在运行的容器id):

docker exec -it 容器id /bin/bash

解决方法2:使用docker attach

docker attach 进入容器正在执行的终端,不会启动新的进程。

如果使用exit退出,容器会停止运行!

如果想退出容器但不想容器停止,则按住Ctrl+P+Q退出

帮助信息:

注意:可以很清楚得看到attach命令后面可以直接接容器id即可

常用命令(其中容器id是你docker中正在运行的容器id):

docker attach 容器id

结果: